Subscribe on YouTube

Защита скриптов от двойного запуска

Большинство администраторов используют на своих серверах скрипты, которые выполняются по крону, и время на их выполнение может увеличиваться. Возникает риск, что запущенный по крону скрипт не успеет завершиться до его повторного запуска, что создаст различные проблемы или же нагрузит сервер.

Наш скрипт (e.g. синхронизация файлов)

#!/bin/sh
dt=`date +%c`
echo $dt
echo "Sync /srv/www/ with node2"
/usr/bin/rsync --numeric-ids -av --delete /srv/www/ root@node2:/srv/www/

Теперь добавим следующий код в начало нашего скрипта, для защиты от повторного запуска:

PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin"
if pidof -x $(basename $0) > /dev/null; then
for p in $(pidof -x $(basename $0)); do
if [ $p -ne $$ ]; then
echo "Script $0 is already running: exiting"
exit
fi
done
fi

В итоге получаем скрипт следующего содержания:

#!/bin/sh
PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin"
if pidof -x $(basename $0) > /dev/null; then
for p in $(pidof -x $(basename $0)); do
if [ $p -ne $$ ]; then
echo "Script $0 is already running: exiting"
exit
fi
done
fi
dt=`date +%c`
echo $dt
echo "Sync /srv/www/ with node2"
/usr/bin/rsync --numeric-ids -av --delete /srv/www/ root@node2:/srv/www/
Поделиться Комментарии