Для контроля запуска только одной копии процесса или скрипта в системе можно использовать flock.
Допустим, у нас есть некий скрипт импорта, который запускается по крону, и время от времени работает очень долго. При этом, иногда работа скрипта затягивается на столько, что следующее его выполнение начинается ещё до того, как отработает предыдущая копия. Что бы такого не происходило, и что бы в системе одновременно работала только одна копия скрипта, стоит запускать его вместе с flock:
- Старое cron задание:
10 01 * * 5 sh /root/import.sh
- Модифицированное cron задание:
10 01 * * 5 /usr/bin/flock -xn /var/lock/import.lock -c 'sh /root/import.sh'
Таким образом, вместе с запуском скрипта, создаётся .lock файл, который остаётся заблокирован, пока скрипт будет работать. Как только скрипт завершает свою работу, блокировка с файла снимается, и новый процесс может быть вновь запущен в системе.