Ваш первый шаг должен быть проверить вашу электронную почту .Если какая-либо из команд вашего скрипта напечатает что-либо, особенно ошибки, cron
отправит по электронной почте весь этот вывод владельцу crontab.(При необходимости вы можете перенаправить эту почту пользователю xyz
, добавив MAILTO=xyz
в свой crontab.)
Чтобы лучше понять, что на самом деле выполняется, измените первую строку вашего скрипта на:
#!/bin/bash -x
Включает режим трассировки bash , который показывает каждую выполняемую команду.Как упоминалось выше, когда ваш сценарий запускается cron
, этот журнал трассировки выполнения будет отправляться по электронной почте.
Наконец, обратите внимание, что все задания cron выполняются в ограниченной среде.man 5 crontab
чтобы увидеть, какие переменные среды установлены для каких значений, и предположить, что ничего больше не задано, точка.(Это играет критическую роль по крайней мере в одной из используемых вами утилит.)
Теперь для определенных утилит:
notify-send
использует D-Шина Система обмена сообщениями для отправки уведомлений на ваш рабочий стол.Для этого требуется, чтобы он знал, как подключиться к шине D-Bus, например, bus , и это делается с помощью определенной переменной среды:
$ env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
Конечно, эта переменная несуществует в стандартной среде cron
, поэтому запустите приведенную выше команду в своей системе, а затем скопируйте эту строку DBUS_SESSION_BUS_ADDRESS=...
в свой crontab.Это добавляет правильную настройку DBUS_SESSION_BUS_ADDRESS
ко всем окружениям ваших заданий cron.
У меня нет опыта работы с ssmtp
, но на странице man сказано, что она многословна (-v
) режим, поэтому назовите его как:
ssmtp -v myemail@domain.com < /tmp/report.txt
в вашем скрипте и посмотрите, что он вам скажет.