LINUX.ORG.RU

cron и неверное имя скрипта

 


0

2

столкнулся тут с одной штукой

поставил себе в крон скриптик на исполнение, но ошибся в имени, к примеру

* * * * * f00.sh #надо было foo.sh 

проверил работу в логах

May 10 04:00:01 user CRON[41047]: (root) CMD (f00.sh)
May 10 04:00:01 user CRON[41046]: (CRON) info (No MTA installed, discarding output)

То что запуска не было как-то не очевидно. Понятно, что крон хотел письмо послать, но нету мта.

Собственно вопрос как сделать так, чтобы ошибки запуска отражались в логе явно без отправки писем? Речь не идет о логах самого скрипта, ведь до него дело не доходит.

★★★★
Ответ на: комментарий от bass

это не то. Там рассказывают, как подавить вызов МТА. Это и так понятно. А мне хотелось бы узнать, что заданного скрипта не существует.

Psilocybe ★★★★
() автор топика
Ответ на: комментарий от Psilocybe

* * * * * user if [ -x f00.sh ]; then foo.sh; else logger -t CRON "f00.sh not exists"; fi

p.s. если есть возможность пользуйся systemd.timer

bass ★★★★★
()
test -x /path/to/script && /path/to/script || logger 'XEP'
zmc
()
Ответ на: комментарий от Psilocybe

cron запускает не скрипт, а шелл и отдаёт ему всё, что написано в команде. cron не может знать, что в строке — имя файла со скриптом или встроенная команда шелла...

mky ★★★★★
()
Ответ на: комментарий от bass

f00.sh

then foo.sh

вот наглядная демонстрация, что если два раза указывать имя скрипта, то можно опечататься. Уж проще какой-нибудь отдельный скрипт-процесс накостылить, который читает crontab и проверяет, что там только существующие скрипты...

mky ★★★★★
()
Ответ на: комментарий от Psilocybe

это не то.

Я так понял, крон, как раз, и хотел в письме рассказать о несуществующем скрипте. :)

PS systemd.timer гораздо «богаче» в инструментарии.

Oleg_Iu
()
Ответ на: комментарий от Psilocybe

Всё там то.

Вывод (stdout+stderr) надо перенаправить в лог, в этом логе и будут все ошибки. Крон шлёт письма с выводом скрипта, в данном случае в выводе было сообщение об ошибке но это просто частный случай.

firkax ★★★★★
()

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

К сожалению никак, стандартный (vixie) cron так не умеет, только отправка по почте и всё.

spirit ★★★★★
()

Может такой вариант:

* * * * * f00.sh 2>> /var/log/cron.err
Получаем в cron.err такой выхлоп:
/bin/sh: 1: f00.sh: not found

Bootmen ☆☆☆
()
28 декабря 2021 г.

подымать глобальную почту для таких случаев нерационально, но включать локальную крайне рекомендую, все сообщения о ЧП на машине туда летят

#скорее всего стоит, но на всякий случай
apt install exim4 
#самая главная команда всё остальное можно пропустить, на все вопросы: хочу только локальную почту
dpkg-reconfigure exim4-config
#любимый мой консольный почтовый клиент
apt install mutt
#чтобы почта для root прилетала пользователям, скорее всего там уже всё настроено, но всё равно
nano /etc/aliases
# в нём должно быть что то вроде root: admin@example.net,user@localhost
Проверка:
запустить sudo с неверным паролём появится письмо с предупреждением
или
echo 'Test' | mail -s Test root

s-warus ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.