![Почему cronjob не выполняет команду feh](https://rvso.com/image/1482469/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20cronjob%20%D0%BD%D0%B5%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%83%20feh.png)
Я создаю cronjob для загрузки новой картинки из источника каждые десять минут и устанавливаю ее в качестве обоев с помощью feh. Файл загружается, но обои не меняются. В чем проблема? crontab -e
выполняет команды от имени пользователя, так что должно быть так, как если бы я запускал строку - что, кстати, работает.
вот сценарий
#!/bin/sh
#Filename
file="space-"$(date +%x_%H:%M:%S)
#save it
wget http://rammb.cira.colostate.edu/ramsdis/online/images/latest_hi_res/himawari-8/full_disk_ahi_true_color.jpg -O /home/tim/Bilder/Wallpaper/$file -o /dev/null
#set background
feh --bg-max /home/tim/Bilder/Wallpaper/$file
Вот crontab -e
для пользователя, какой фон следует изменить (т.е. для меня)
*/10 * * * * /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh
В моем системном журнале я нашел эти строки
Jan 31 21:40:01 LinuxMint CRON[18209]: (tim) CMD (/bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh)
Jan 31 21:40:11 LinuxMint CRON[18204]: (CRON) info (No MTA installed, discarding output)
решение1
К сожалению, недостаточно подчеркивается, что процессы среды, запускаемые cron get, являютсяоченьпросто, он содержит только самые важные переменные и значения. Вы можете проверить это, запустив скрипт оболочки, который содержит только
#!/bin/bash
set > /tmp/myset.txt
Вы увидите, что там не задана переменная DISPLAY, которая была бы необходима для запуска каких-либо приложений на базе X (и за редкими исключениями мы используем только такие приложения).
Вам нужно поставить что-то вроде
export DISPLAY=:0.0
в свой сценарий и иметь лучшие шансы.
решение2
Чтобы дополнить ответ Гомбаи инструкциями:
Запустите env | grep -i display
и проверьте значение DISPLAY
. Вероятно, это :0.0
, или :0
.
Измените ваш crontab соответствующим образом:
*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh