У меня есть этот bash-скрипт на сервере, который запускается каждый час через cron. Я был совершенно счастлив, но теперь пользователь хочет иметь возможность настраивать частоту через веб-интерфейс.
Мне неудобно манипулировать конфигурацией cron программно, но я не уверен, что другие варианты лучше.
Как я это вижу, я могу либо:
- Запланируйте запуск сценария раз в минуту и проверьте, действительно ли он запускается "сейчас"
- Откажитесь от cron и используйте deamon, который является его собственным планировщиком. Это, вероятно, означает переписать скрипт на python
- ... или смиритесь с этим и управляйте конфигурацией cron из веб-интерфейса (написано на python BTW)
Что мне делать?
РЕДАКТИРОВАТЬ: чтобы уточнить, главная причина, по которой я опасаюсь манипулировать cron, заключается в том, что в основном это манипулирование текстом без проверки, и если я испорчу его, ни одно из моих других заданий cron не запустится.
Вот что я в итоге сделал:
Следуя совету Стефанва, я добавил следующую строку вверху моего сценария bash:
if [ ! `cat /home/username/settings/run.freq` = $1 ]; then
exit 0
fi
Я настроил следующие задания cron:
0 */2 * * * /home/username/scripts/publish.sh 2_hours
@hourly /home/username/scripts/publish.sh 1_hour
*/30 * * * * /home/username/scripts/publish.sh 30_minutes
*/10 * * * * /home/username/scripts/publish.sh 10_minutes
В веб-интерфейсе я позволяю пользователю выбирать между этими четырьмя опциями, и в зависимости от того, что выбрал пользователь, я записываю строку 2_hours/1_hour/30_minutes/10_minutes
в файл по адресу /home/username/settings/run.freq
.
Мне это не нравится, но, похоже, лучшая альтернатива.