LINUX.ORG.RU
решено ФорумAdmin

Cron и несуществующие/неисполняемые команды

 ,


0

2

Дано: в кронтабе пользователя user содержится строка вида (для примера)

MAILTO=""
* * * * * abcdef

Так как программы с именем abcdef в $PATH не содержится, то запуск, естественно, оказывается неудачным. Однако в логах содержится только запись

Jab 1 12:00:01 host CRON[00000]: (user) CMD (abcdef)
Никаких сообщений о том, что код возврата не равен 0, нет. Разбираться с почтой не хочется, а кроме того, поскольку вывод команды пустой, есть подозрение, что сообщение отправлено не будет.

Что делать?

★★★

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

Поскольку не хочется, посмотрите что даётся в письме при наличии почты:

  • в конец subj не добавляется (failed) — мне кажется это странным; а вам?
  • в теле

    /bin/sh: 1: abcde: not found

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

У меня просто пока не было возможности проверить поведение с почтой. А если задание запустилось, но вернуло ненулевой код, (failed) в subj дописывается?

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

А если задание запустилось, но вернуло ненулевой код, (failed) в subj дописывается?

Поигрался, и выяснилось, что:

  • Для Debian GNU/Linux 7.0 amd64 — нет.
  • Для Debian GNU/Linux 6.0 i386 — да, но при этом из команды должен быть хоть какой-нибудь вывод в stdout, иначе на почту не придёт ничего и при ненулевом коде:
    $ cat ~/scripts/exit-1.sh
    #!/bin/bash
    echo Exit with error
    exit 1
    $ crontab -l | grep exit-1.sh
    29 18 * * * /bin/bash ~/scripts/exit-1.sh
    

    Письмо с выхлопом:

    From - Fri May 31 18:29:10 2013
    X-Account-Key: account6
    X-UIDL: 1745dcdf055c322a
    X-Mozilla-Status: 0001
    X-Mozilla-Status2: 00000000
    X-Mozilla-Keys:                                                                                 
    Return-path: <user@host.domain>
    Envelope-to: user@host.domain
    Delivery-date: Fri, 31 May 2013 18:29:02 +0400
    Received: from user by host.domain with local (Exim 4.72)
    	(envelope-from <user@host.domain>)
    	id 1UiQKE-0005aO-1n
    	for user@host.domain; Fri, 31 May 2013 18:29:02 +0400
    Date: Fri, 31 May 2013 18:29:02 +0400
    Message-Id: <E1UiQKE-0005aO-1n@host.domain>
    From: root@host.domain (Cron Daemon)
    To: user@host.domain
    Subject: Cron <user@host> /bin/bash ~/scripts/exit-1.sh (failed)
    Content-Type: text/plain; charset=UTF-8
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <HOME=/home/user>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=user>
    
    Exit with error
    
    
    

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

Интересно, почему так и зачем изменили поведение. Спасибо за тесты, в любом случае.

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

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

Kiborg ★★★
() автор топика

vixie-cron никогда(ни разу не видел) не писал в логи результат выполнения. есть подозрение, что не только он(от других тоэе не видел).

Что делать

В начало кронтаба BASH_ENV=файл, в котором что-то типа:

trap 'logger -p cron.error «фигня стряслась в $BASH_COMMAND»' ERR

для небаша, нужно читать.

DonkeyHot ★★★★★
()

Разбираться с почтой не хочется

А что с ней разбираться? :) К примеру, в моём дебиановском корыте всё на редкость просто:

  • Ставите exim4, либо, если уже стоит, делаете dpkg-reconfigure — на сколько помню, не самого exim4, а того пакета, который отвечает за его конфигурирование, и указываете ему, что надо работать в режиме local delivery
  • Для получения почты для root делаете как-то так
    $ echo "root: myusername" >>/etc/aliases
    $ su -
    # newaliases
    
    Хотя, ради справедливости, стоит заметить, что вот так уже сконфигурировано для того повседневного пользователя, который указан при установке ОС
  • Если на хосте есть графический десктоп, то любой вменяемый графический MUA — по крайней мере, icedove (thunderbird) и evolution — умеет работать с локальной доставкой; файл находит и/или предлагает либо сам, либо надо указывать /var/mail/myusername или /var/spool/mail/myusername
  • Если на хосте нет графического декстопа, то ставите popa3d — у меня заработал прям сразу. Забираете по протоколу POP3, единственное, конечно, что может насторожить — плейнтекстовые пароли, т.е. незащищённость, но если надо, можно повозиться с SSL с этим или любым другим pop3-демоном

Плюсы такие, что если система не игрушечная, а более-менее боевая, то можно прикрутить logwatch, smartd и любые другие проги ) которые будут вас уведомлять о том, как идут дела в системе.

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

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

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

Спасибо, конечно, просто эту почту никто читать заведомо не будет :) Ну, либо надо делать дополнительные телодвижения.

На самом деле я просто думал что это я чего-то не нашел в документации, а оказалось всё немного сложнее.

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