Как предотвратить атд от запуска прошлых заданий?

9

Демон - отличный инструмент! Однако, если задание запланировано на 8:00, и в это время машина выключена, он будет запускаться при каждой загрузке машины. Что я хотел бы сделать, это остановить его от выполнения работы, если время прошло. Я искал страницы справочника и в сети, но либо ответа нет, либо я не смог его найти. Я использую Arch, но насколько я знаю, он очень похож в разных дистрибутивах.

Любая помощь высоко ценится!

Элмер
источник

Ответы:

7

Когда работа становится прошлой работой? Если вы включаете систему в 7:59:50, а atдемон запускается в 8:00:01, должно ли выполняться задание? Что если демон запускается в 7:59:59, но для чтения всех его файлов требуется две секунды?

Вам решать! Начните свою работу с проверки времени и прервите, если время прошло.

export execute_by_date=$(date +%s 'tomorrow 8:01')
at tomorrow 8:00
[ "$(date +%s)" -le "$execute_by_date" ] || exit
do_stuff
␄
Жиль "ТАК - перестань быть злым"
источник
2

Вы можете написать сценарий инициализации, который отменяет все запланированные рабочие места при завершении работы или перезагрузке.

Я не уверен насчет Arch-Linux - есть /etc/sysconfig/atили что-то подобное? Возможно, это просто переключатель конфигурации, который вы должны перевернуть ...

Nils
источник
Я думаю, что это лучшее решение, очистить atочередь при загрузке перед atзапуском.
Багамат
Это именно то, что я ожидаю, будет / должно быть возможно! К сожалению, /etc/sysconfig/в Arch нет никакого каталога ... И ни один из файлов, перечисленных на страницах руководства, не является файлом конфигурации.
Элмер
@ Элмер Я просто погуглил немного и прочитал об арке линукс. «/etc/rc.d/atd», похоже, является сценарием инициализации для демона там. Загляните туда, если вы видите, что он разбирает какой-то конфигурационный файл. Если вам не повезло, вы должны использовать свой собственный init-скрипт (например, назвать его atclearи запустить раньше atd).
Нильс
2

Мой голос за cronдемона.

Если вам нужно запускать его в определенное время дня, но не в одно и то же время каждый день, я бы создал crontab с одним диапазоном записей в день с определенным временем выполнения:

Некоторые примеры взяты из crontab(5):

# run five minutes after midnight, every day
5 0 * * *       command
# run at 2:15pm on the first of every month
15 14 1 * *     command
# run at 10 pm on weekdays
0 22 * * 1-5    command
RPET
источник
0

То, что вы хотите, это cron-демон. Это именно то, что вы хотите.

Накормите свою любимую поисковую систему для cron daemon, и у вас будет множество руководств и инструкций. man cronи man crontabтакже полезно.

Marco
источник
Спасибо за помощь, но cron не работает для моей проблемы. Мне нужно, чтобы скрипт запускался в определенное время дня, но не в одно и то же время каждый день.
Элмер