Как я могу предотвратить одновременное выполнение двух сценариев оболочки?

У меня есть tar скрипт резервного копирования, который запускается раз в месяц. Он проходит ночью через cron. У меня также есть график питания, который перезагружает сервер на 4,15 каждую ночь.

Проблема в том, что сервер перезагружается во время работы скрипта tar.

Можно ли что-то добавить в начало и конец скрипта bash, чтобы отключить перезагрузку, когда скрипт активен?

2
задан 29 May 2012 в 16:10

2 ответа

Существует обсуждение того, как реализовать взаимное исключение, привязывают часто задаваемые вопросы 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
3
ответ дан 29 May 2012 в 16:10

Я бы использовал технику опроса для 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
0
ответ дан 29 May 2012 в 16:10

Другие вопросы по тегам:

Похожие вопросы: