Запрет на повторный запуск, если еще первый не отработал. Есть скрипт, который запускается по крону и может долго отрабатывать. Иногда он не успевает и запускается повторно. Висят два процесса. Как этого избежать?
Запрет на повторный запуск, если еще первый не отработал
Ну и вопросы)) Тот же lock-файл например.
Как-то так:
...
if [ -f $PIDFILE ] then
echo "An another copy of this program is running. Exiting" > 2>&1 | tee $LOG
fi
...
Блин. А ведь верно. Можно же в сам скрипт добавить проверку. Это праздники виноваты в моем тупизме. =)
Может подойдёт /usr/bin/flock ?
Может подойдёт /usr/bin/flock ?
Подробнее?
http://www.opennet.ru/man.shtml?topic=flock&category=1&russian=2
Это то, что доктор прописал, нужно запись только в crontab'e поправить...
Вот простой пример, почта сжимается и кидается а папку /mnt/backup/mail/
Пока не от работает сжатие, другие задачи в скрипте не должны выполнятся.
Обычно у меня после этой строчки идут другие команды:
#!/bin/sh
/usr/bin/flock -xn /var/lock/script.lock -c 'tar czvf /mnt/backup/mail/mail.$(date +%Y%m%d-%H%M%S).tgz /var/vmail'
Но возможно я не правильно понимаю смысл этой штуки, так как скрипты писать не умею.
XliN, у вас там в /etc/ есть файл functions (в RH во всяком случае есть), и там есть нужные функции.
вот кусок из моего:
# __proc_pids {program} [pidfile]
# Set $pid to pids from /var/run* for {program}. $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}
pid=
if [ -f "$pid_file" ] ; then
local line p
read line < "$pid_file"
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
done
if [ -n "$pid" ]; then
return 0
fi
return 1 # "Program is dead and /var/run pid file exists"
fi
return 3 # "Program is not running"
}
# Output PIDs of matching processes, found using pidof
__pids_pidof() {
pidof -c -o $$ -o $PPID -o %PPID -x "$1" || \
pidof -c -o $$ -o $PPID -o %PPID -x "${1##*/}"
}
# A function to start a program.
daemon() {
# тут длинная программа для старта демона
не, всё правильно вроде./usr/bin/flock -xn /var/lock/script.lock -c 'tar czvf /mnt/backup/mail/mail.$(date +%Y%m%d-%H%M%S).tgz /var/vmail'
Но возможно я не правильно понимаю смысл этой штуки, так как скрипты писать не умею.
drBatty, Спасибо, я воспользовался flock как советовали выше. Только не много с другими ключами. В итоге пока работает один скрипт, другой не запускается. Очень удобная штука =)