Установлено 2 расписания:
- Cron запускается каждые 8 утра
0 8 * * * myCronJob.sh
- Fcron запускается каждые 61 минуту:
@1h1 myFcronJob.sh
В конце концов они столкнутся друг с другом, и это не сработает, потому что в этом сценарии одновременно может выполняться только одно задание. Чтобы избежать этой проблемы, мы можем использовать блокировку, чтобы разрешить только одно задание за раз, например, этот код здесь
0 8 * * * пользователь/bin/flock /usr/tmp/lfile.lockfile -c 'myCronJob.sh'
@ 1h1 пользователь/bin/flock /usr/tmp/lfile.lockfile -c 'myFcronJob.sh'
Это поднимает другую проблему, если fcron настроен на запуск каждые 61 минуту, и когда он запускается и будет ждать завершения другого задания, таймер будет смещен, потому что в следующий раз, когда он запустится, будет
(61 минута - время блокировки) Требуется, чтобы myFcronJob.sh запускался через 60 минут.
Пример
- Задание Cron начинается в 8 утра и выполняется в течение 5 минут.
- Fcron тоже собирается запуститься в 8:01, но заметил, что замок на месте.
- Fcron ждет завершения задания Cron
- Fcron наконец запускается в 8:05 утра
- Fcron будет работать 61 минуту с 8:01, что приведет к тому, что следующая итерация начнется в 9:02 вместо ожидаемого 9:06.
Я читал справочную страницу для fcrontab с надеждой, что есть какой-нибудь полезный флаг, но мало что понял. Помощь приветствуется