Записал короткий сценарий оболочки "wallch.sh" для случайного изменения моего настольного образования:
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC
И скопированный это в /bin/
, затем sudo chmod 755 /bin/wallch.sh
к нему. Это могло легко работать от терминала гладко без любой ошибки.
Однако, когда я добавляю строку в crontab (выполнение этого от терминала как пользователь), как:
* * * * * /bin/wallch.sh
Это просто не работало бы. Теоретически это должно было работать каждую минуту.
/var/log/syslog
говорит:
Feb 25 19:36:01 user-Ubuntu CRON[11762]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:36:01 user-Ubuntu CRON[11761]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:37:01 user-Ubuntu CRON[11790]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:37:01 user-Ubuntu CRON[11789]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:38:01 user-Ubuntu CRON[11828]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:38:01 user-Ubuntu CRON[11827]: (CRON) info (No MTA installed, discarding output)
Какие-либо предложения?
Обновление:
Сценарий, который я записал (обратите внимание на то, что я изменил имя файла, теперь это /bin/wallch
. Кроме того, я удалил начало строк комментария #
кроме хижины):
#!/bin/sh
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC
stat /bin/wallch
вывод:
user@user-Ubuntu:~$ stat /bin/wallch
File: `/bin/wallch'
Size: 484 Blocks: 8 IO Block: 4096 regular file
Device: 806h/2054d Inode: 130389 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-02-26 11:03:01.727198732 -0600
Modify: 2013-02-26 10:37:46.727135926 -0600
Change: 2013-02-26 11:02:06.215196433 -0600
Birth: -
user@user-Ubuntu:~$
Спасибо за любые ответы!
используйте эту строку крона вместо этого
* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh
мог также использовать */2 в столбце часа для фонового изменения каждые два часа (все ровные часы)
Совет Offtopic: это не правило просто форма, чтобы держать сценарии отдельно, использовать /usr/local/bin
для Вас администраторские сценарии.:)
Да, вы можете установить любой пакет MTA. Если у вас уже есть SMTP-сервер (MTA), который вы можете использовать, выберите nullmailer
. В противном случае вы могли бы пойти с postfix
(требует некоторой работы) или courier-mta
, который также имеет нормальные значения по умолчанию (и несколько проще для начинающих, IMO).
Приведенные выше имена с фиксированной шириной являются именами пакетов в Ubuntu. Таким образом, apt-get install <packagename>
установит вам MTA. Основная проблема заключается в том, что вы не настроили MTA и, следовательно, cron
не может отправлять почту. Само задание не указывает на ошибку из вывода журнала, который я вижу.
Примечание: вы также можете подавить любой вывод из ваших заданий, добавив (к строке задания):
> /dev/null 2>&1
... и даже подавив коды выхода из ошибок, добавив (далее): [ 1117]
|| /bin/true
... Я бы не советовал, однако. Также настройка MAILTO
в вашем crontab
(см. man 5 crontab
) является еще одним вариантом здесь. Но это своего рода «глобально» для соответствующих crontab
:
MAILTO=""
Что cron
отправляет по почте, это вывод (stdout / stderr, если он находит MTA, который является) задания, которое он побежал. И это делает это по умолчанию, да. Также коды ошибок (отличные от нуля) приведут к отправке по почте.
Однако, это также должно быть в состоянии выполнить задание, которое во всех случаях требует, чтобы файл был исполняемым (chmod a+x ...
) или чтобы в случае сценария вы указали путь к интерпретатору сценария и чтобы в случае сценария в начале файла существует правильная строка hashbang.