
Написал короткий скрипт оболочки «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
. Также я удалил строки комментариев, начинающиеся с , #
за исключением shebang):
#!/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:~$
Спасибо за любые ответы!
решение1
Да, вы можете установить любой пакет MTA. Если у вас уже есть SMTP-сервер (MTA) где-либо, который вы можете использовать, выберите nullmailer
. В противном случае вы можете использовать postfix
(требует некоторой работы) или , courier-mta
который также поставляется с разумными настройками по умолчанию (и несколько проще для новичков, на мой взгляд).
Имена фиксированной ширины выше — это имена пакетов в Ubuntu. Так что apt-get install <packagename>
вы установите MTA. Основная проблема, похоже, в том, что вы не настроили MTA и поэтому cron
не можете отправлять почту. Само задание не указывает на ошибку, судя по выводу журнала, который я вижу.
Примечание: вы также можете подавить любой вывод ваших заданий, добавив (в строку задания):
> /dev/null 2>&1
... и даже подавить коды выхода из ошибок с помощью добавления (далее):
|| /bin/true
... Я бы не рекомендовал этого, однако. Также настройка MAILTO
в вашем crontab
(см. man 5 crontab
) является еще одним вариантом здесь. Но это своего рода "глобальный" для соответствующего crontab
:
MAILTO=""
Что cron
отправляет по почте, так это вывод (stdout/stderr, если он находит MTA, который есть) задания, которое он выполнил. И он делает это по умолчанию, да. Также коды выхода ошибок (ненулевые) приведут к отправке вывода по почте.
Однако он также должен иметь возможность запустить задание, что во всех случаях требует, чтобы файл был исполняемым ( chmod a+x ...
) или чтобы в случае скрипта вы добавили путь к интерпретатору скрипта и чтобы в случае скрипта в начале файла присутствовала соответствующая строка с хэшбэнгом.
решение2
используйте вместо этого эту строку cron
* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh
можно также использовать */2 в колонке часов для смены фона каждые два часа (все четные часы)
Совет не по теме: это не правило, а просто форма разделения скриптов, используйте /usr/local/bin
свои административные скрипты. :)