Запуск 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.

Другие вопросы по тегам