3

Я создаю 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) 

2 ответа2

3

К сожалению, недостаточно подчеркивается, что процессы среды, запущенные cron get, очень просты, они содержат только самые важные переменные и значения. Вы можете проверить это, запустив скрипт оболочки, который содержит только

#!/bin/bash

set > /tmp/myset.txt

Вы увидите, что там не установлена переменная DISPLAY, которая была бы необходима для запуска любых приложений на основе X (и, за исключением редких исключений, все, что мы используем, такого рода).

Вы должны поставить что-то вроде

export DISPLAY=:0.0

в ваш сценарий и иметь лучшие шансы.

1

Чтобы завершить ответ Гомбая с инструкциями:

Запустите env | grep -i display и проверить значение DISPLAY . Вероятно, это :0.0 или :0 .

Измените ваш crontab соответственно:

*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .