Защита скриптов от двойного запуска
Большинство администраторов используют на своих серверах скрипты, которые выполняются по крону, и время на их выполнение может увеличиваться. Возникает риск, что запущенный по крону скрипт не успеет завершиться до его повторного запуска, что создаст различные проблемы или же нагрузит сервер.
Наш скрипт (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/