У меня есть чрезвычайно простой cronjob, который я настроил, чтобы убедиться, что скрипт продолжает работать, и напишите мне, если он выйдет из строя (я знаю, что это низкотехнологичный, но это было задумано как быстрое решение)

К сожалению, этот cronjob не делает свою работу

Вот соответствующая строка из моего crontab:

* * * * * pgrep -f app.py || echo "Your app is down" | mail -s "URGENT" steven.abarnett@gmail.com

Когда я запускаю команду в оболочке, она работает: я получаю электронное письмо, только если приложение не работает. В качестве небольшого побочного эффекта, когда приложение работает, он выводит PID на экран.

Когда я запускаю команду через cronjob, я никогда не получаю никаких писем. Расследование (установив параметр MAILTO= для просмотра вывода cronjob) я заметил, что когда приложение работает, оно выводит два PID, а когда приложение не запускается, оно выводит один PID (никогда не ноль, поэтому оно никогда не отправляет электронное письмо )

Это почти как если бы cronjob раскручивал процесс, который, в свою очередь, виден сам по себе - очень похоже на то, как печатает ps -ax | grep "anything" всегда будет возвращаться:

12345 pts/2    S+     0:00 grep --color=auto anything

Кто-нибудь знает, как исправить этот cronjob?

1 ответ1

1

Для тех, кто сталкивается с этим в будущем, решение было довольно простым:

При беге

pgrep -f "anything"

в cronjob он вернет процесс для оболочки bash, созданной cron.

Вместо этого я должен был использовать

ps -ax | grep "anything" | grep -v grep

искать запущенный процесс и одновременно удалять любой процесс, имеющий имя "grep"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .