[freebsd] Повторный запуск скрипта в cron

Anton Sayetsky vsasjason at gmail.com
Wed Jan 25 21:00:50 EET 2017


25 января 2017 г., 20:56 пользователь Andrey Marshalenko
<marshall at marshall.kiev.ua> написал:
> Hi.
>
> Можно реализовать через файл блокировки (в примере ниже переменная LOCK). Т.
> е. при запуске скрипта создается файл, который не удаляется если задание не
> завершено (например первый бакап длится больше заданного интервала вркмкни).
>
> Пример бакапа домашних папок пользователей по времени (типа «Машина
> времени»):
>
> # cat rbackup.sh
> =============================================================
> #!/bin/sh
> date=`date "+%Y-%m-%d-%H%M%S"`
> rsync=/usr/local/bin/rsync
> LOCK=/var/spool/lock/rbackup.lock
> LOG=/var/log/rbackup.log
>
> SRC=/home/
> TARGET=/var/data/backups/homes/$date
> P_TARGET=/var/data/backups/homes/Latest
>
> if [ -f $LOCK ]; then
>     exit 0
> fi
>
> touch $LOCK
> date >> $LOG
> mkdir -p $TARGET
>
> $rsync -auvAHX --link-dest=$P_TARGET $SRC $TARGET >>$LOG 2>&1
>
> rm -f $P_TARGET
> ln -s $TARGET $P_TARGET
> rm $LOCK
>
> exit 0
> =============================================================
Не учитывается ситуация залипания. Уж лучше как-то так, ежели костылить:
if [ -f "${script_pidfile}" ] && [ -s "${script_pidfile}" ]; then
        slog_i "pid found, checking for another running instance"
        pgrep -F "${script_pidfile}" >/dev/null 2>&1
        if [ "$?" -eq 0 ]; then
                running_pid=`cat "${script_pidfile}"`
                slog_w "already running at pid ${running_pid}"
                exit 2
        fi
fi


More information about the freebsd mailing list