LinuxForum.Fans
Тема

Запрет на повторный запуск, если еще первый не отработал

Автор: XliN 12 сообщений 1357 просмотров
#383724

Запрет на повторный запуск, если еще первый не отработал. Есть скрипт, который запускается по крону и может долго отрабатывать. Иногда он не успевает и запускается повторно. Висят два процесса. Как этого избежать?

#383727

Ну и вопросы)) Тот же lock-файл например.

#383730

Как-то так:

text
...
if [ -f $PIDFILE ] then
    echo "An another copy of this program is running. Exiting" > 2>&1 | tee $LOG
fi
...
#383731

Блин. А ведь верно. Можно же в сам скрипт добавить проверку. Это праздники виноваты в моем тупизме. =)

#383737

Может подойдёт /usr/bin/flock ?

#383756
"AlfaStriker" написал:
Может подойдёт /usr/bin/flock ?

Подробнее?

#383763

http://www.opennet.ru/man.shtml?topic=flock&category=1&russian=2
Это то, что доктор прописал, нужно запись только в crontab'e поправить...

#383787

Вот простой пример, почта сжимается и кидается а папку /mnt/backup/mail/
Пока не от работает сжатие, другие задачи в скрипте не должны выполнятся.
Обычно у меня после этой строчки идут другие команды:

text

#!/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'

Но возможно я не правильно понимаю смысл этой штуки, так как скрипты писать не умею.

#384071

XliN, у вас там в /etc/ есть файл functions (в RH во всяком случае есть), и там есть нужные функции.

вот кусок из моего:

text
# __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() { # тут длинная программа для старта демона

#384072

"AlfaStriker" написал:
/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'

Но возможно я не правильно понимаю смысл этой штуки, так как скрипты писать не умею.
не, всё правильно вроде.
#384091

drBatty, Спасибо, я воспользовался flock как советовали выше. Только не много с другими ключами. В итоге пока работает один скрипт, другой не запускается. Очень удобная штука =)

#384150

XliN, я уже писал сегодня на эту тему: locks

Войдите или зарегистрируйтесь, чтобы ответить.