Запуск bash-скрипта из crontab
У меня проблемы с запуском приведенного ниже простого скрипта из crontab:
#!/bin/bash
notify-send "battery.sh working"
Права доступа к файлу rwxr-xr-x
и работает нормально с любой из команд bash battery.sh
а также sh battery.sh
,
В моем crontab я попытался запустить его с обоими bash
а также sh
, с абсолютным и локальным путем. Мой текущий crontab выглядит следующим образом:
* * * * * /home/marpangal/battery.sh
* * * * * sh battery.sh
* * * * * bash battery.sh
* * * * * sh /home/marpangal/battery.sh
* * * * * bash /home/marpangal/battery.sh
Однако cron не выполняет скрипт, и я не получаю сообщения от notify-send.
2 ответа
notify-send
нуждается в DBUS_SESSION_BUS_ADDRESS
переменная окружения для связи с текущим сеансом рабочего стола. поскольку cron
работает с почти пустой средой, эта переменная недоступна.
Но вы можете установить его прямо в вашем battery.sh
сценарий:
export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)
notify-send "Message from cron"
Это ищет идентификатор процесса вашего gnome-session
и извлекает DBUS_SESSION_BUS_ADDRESS
(вместе с его значением) с тех пор gnome-sessions
' среда.
Сейчас notify-send
может отображать уведомления в сеансе вашего рабочего стола.
Ответ Флопса дает мне -bash: warning: command substitution: ignored null byte in input
- поэтому я попробовал что-то другое:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
notify-send "Message from cron"
Я предполагаю, что это не так гибко, как оригинальный экспорт, но он работает для меня в моем пользовательском crontab.