maxpoitn2point
@maxpoitn2point
Как всегда, в своем репертуаре

Как предотвратить двойной запуск скрипта?

Написал простенький скрипт для резервирования базы

#!/bin/bash

BACKUP_PATH="/home/backup"
USER="user"
PASS="xxxx"
LOGFILE="/var/log/backup.log"

echo "[--------------------------------[`date +%F--%H-%M`]--------------------------------]" >> $LOGFILE
echo "[----------][`date +%F--%H-%M`] Run the backup script..." >> $LOGFILE

mysqldump -u $USER -p$PASS s11 >> $BACKUP_PATH/s11-`date +%F--%H-%M`.sql

echo "[----------][`date +%F--%H-%M`] done." >> $LOGFILE

exit


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

34 20 * * * /home/db.sh

подскажите куда смотреть. спасибо
  • Вопрос задан
  • 3099 просмотров
Решения вопроса 3
merryjane
@merryjane
Системный администратор
Запускайте скрипт через flock:
34 20 * * * flock -xn /home/db.lock /home/db.sh
Из преимуществ перед просто созданием lock-файла и его проверкой при запуске скрипта: ситуация когда процесс был чем-то прибит или segfault-ся, то-есть lock-файл остался, а процесс не запущен. В этом случае он не запустится пока не удалите lock-файл руками.
Ответ написан
Комментировать
sim3x
@sim3x
Ответ написан
Комментировать
@RPG
Из серии "проще не придумаешь" вот такой вариант:

LOCK=/tmp/.$0.lock
[ -f $LOCK ] && exit -1
touch $LOCK

....

rm $LOCK
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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