Один из способов, которые я делал в прошлом, - это просто поместить в начало каждого скрипта (скажем, checkUsers.sh
):
touch /tmp/lastrun/checkUsers.sh
, затем периодически выполнять другую работу, использующую find
, чтобы найти все те «маркерные» файлы в tmp/lastrun
, которые старше, чем день.
Вы можете поиграться с таймингами, имея /tmp/lastrun/hour/
и tmp/lastrun/day/
для разделения заданий, которые имеют разные расписания.
Обратите внимание, что это не будет перехватывать сценарии, которые никогда не запускаются , поскольку они никогда не создадут исходный файл для find
-ing.Чтобы облегчить это, вы можете:
- создать этот файл вручную при создании задания cron (не обрабатывает ситуации, когда кто-то случайно удаляет файл маркера);или
- вести список необходимых файлов маркеров где-нибудь, чтобы вы могли определить, когда они отсутствуют, а также устарели.
И, если ваша задача cron не является сценарием,поместите touch
непосредственно в crontab
:
0 4 * * * ( touch /tmp/lastrun/daily/checkUsers ; /usr/bin/checkUsers )
Проверить простой сценарий find
гораздо проще, чем проверить каждое из ваших cron
заданий.