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

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

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

Наш скрипт (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/

Комментарии

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×