У меня есть tar
скрипт резервного копирования, который запускается раз в месяц. Он проходит ночью через cron
. У меня также есть график питания, который перезагружает сервер на 4,15 каждую ночь.
Проблема в том, что сервер перезагружается во время работы скрипта tar
.
Можно ли что-то добавить в начало и конец скрипта bash, чтобы отключить перезагрузку, когда скрипт активен?
Существует обсуждение того, как реализовать взаимное исключение, привязывают часто задаваемые вопросы Bash здесь:
http://mywiki.wooledge.org/BashFAQ/045
Вы могли реализовать что-то подобное, но сделать Ваш цикл сценария перезагрузки, пока блокировка не свободна. Я не протестировал следующее, но вот начальная точка:
Сценарий tar:
#!/bin/bash
lockdir=/tmp/myscript.lock
if mkdir "$lockdir"
then # directory did not exist, but was created successfully
echo >&2 "successfully acquired lock: $lockdir"
trap 'rm -rf "$lockdir"' 0 # remove directory when script finishes
# continue script
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
exit 0
fi
# DO YOUR ORIGINAL TAR SCRIPT HERE
Сценарий перезагрузки:
#!/bin/bash
lockdir=/tmp/myscript.lock
while true; do
if mkdir "$lockdir"
then # directory did not exist, but was created successfully
trap 'rm -rf "$lockdir"' 0 # remove directory when script finishes
break # continue with script
else
sleep 5 # sleep for 5 seconds and try again
fi
done
# RUN YOUR REBOOT COMMANDS HERE
Я бы использовал технику опроса для pid этого сценария. Основная идея состоит в том, чтобы подождать, пока скрипт не выпустит PID (то есть он вышел), и только затем перейти к следующему шагу в скрипте перезагрузки. И, конечно, если ни один процесс не запущен, скрипт продолжит перезагрузку.
#!/bin/bash
while pgrep -f my_backup_script_name.sh > /dev/null
do
sleep 0.25 # small delay so that the loop doesn't hog the CPU
done
shutdown -r now