Сценарий удара может сказать, выполняется ли он через крон?

Не имея много удачи, гуглящей этот вопрос и я думал о регистрации его на SF, но это на самом деле походит на вопрос о разработке. В противном случае не стесняйтесь мигрировать.

Так, у меня есть сценарий, который работает через крон каждое утро около 3:00. Я также запускаю те же скрипты вручную иногда. Проблема состоит в том, что каждый раз я запускаю свой скрипт вручную, и он перестал работать, он посылает мне электронное письмо; даже при том, что я могу посмотреть на вывод и просмотреть ошибку в консоли.

Существует ли путь к сценарию удара, чтобы сказать, что он выполняется через крон (возможно, при помощи whoami), и только пошлите электронное письмо раз так? Я хотел бы прекратить получать электронные письма, когда я делаю свое тестирование...

26
задан Topher Fangio 9 July 2010 в 17:09
поделиться

3 ответа

Вы можете попробовать "tty", чтобы узнать, запущен ли он терминалом или нет. Это не скажет вам, что он запущен именно cron, но вы сможете определить, что он "не пользователь как prompt".

Вы также можете получить свой родительский pid и следовать по нему вверх по дереву в поисках cron, хотя это немного тяжеловато.

26
ответ дан 28 November 2019 в 06:33
поделиться

Вот два разных варианта для вас:

  • Возьмите электронную почту из вашего скрипта / программы и позвольте cron обработать ее. Если вы установите переменную MAILTO в своем crontab, cron отправит все распечатанные на этот адрес электронной почты. eg:

    MAILTO=youremail@example.com
    # запускать через пять минут после полуночи, каждый день
    5 0 * * * $HOME/bin/daily.job
    
  • Задайте переменную среды в crontab, которая используется для определения того, работает ли cron. например:

    THIS_IS_CRON=1
    # запускать через пять минут после полуночи, каждый день
    5 0 * * * $HOME/бин/ежедневно.работа
    

    и в вашем скрипте что-то вроде

    if [ -n "$THIS_IS_CRON" ]; затем эхом «Я бегу в кроне»; иначе эхо «Я не бегу в кроне»; fi
    
9
ответ дан 28 November 2019 в 06:33
поделиться

Почему бы не иметь аргумент командной строки -t для тестирования или -c для cron.

Или еще лучше:

-e=email@address.com

Если он не указан, не посылайте письмо.

9
ответ дан 28 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: