Cronが動作しない

Cronが動作しない

デスクトップの背景をランダムに変更するための短いシェル スクリプト「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

実行されませんでした。理論的には 1 分ごとに実行されるはずでした。

/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:~$ 

回答していただければ幸いです。

答え1

はい、任意の MTA パッケージをインストールできます。使用可能な SMTP サーバー (MTA) がすでにどこかにある場合は、 を選択してくださいnullmailer。それ以外の場合はpostfix、 (多少の作業が必要) または を使用できますcourier-mta。こちらには適切なデフォルトも付属しています (初心者にとっては、こちらの方が多少簡単だと思います)。

上記の固定幅の名前は、Ubuntu のパッケージ名です。これでapt-get install <packagename>MTA がインストールされます。主な問題は、MTA が設定されていないためcronメールを送信できないことのようです。ログ出力からジョブ自体にエラーは表示されません。

補足: ジョブ行に以下を追加することで、ジョブからの出力を抑制することもできます:

> /dev/null 2>&1

...さらに、追加することでエラー終了コードを抑制します (さらに):

|| /bin/true

... ただし、お勧めしません。また、( を参照MAILTO) を設定することも別のオプションです。ただし、これはそれぞれの に対して「グローバル」です。crontabman 5 crontabcrontab

MAILTO=""

メールで送信されるのはcron、実行したジョブの出力 (MTA が見つかった場合は stdout/stderr) です。これはデフォルトで実行されます。また、エラー終了コード (ゼロ以外) によっても出力がメールで送信されます。

ただし、ジョブを実行できる必要もあり、そのためには、いずれの場合もファイルが実行可能 ( chmod a+x ...) であるか、スクリプトの場合はスクリプト インタープリターへのパスを先頭に追加し、スクリプトの場合はファイルの先頭に適切なハッシュバン行が存在する必要があります。

答え2

代わりにこのcron行を使用してください

* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh

2時間ごとに背景を変更するには、時間の列に* / 2を使用することもできます(すべて偶数時間)。

トピック外のアドバイス: これはルールではなく、スクリプトを区別するための単なるフォームです。/usr/local/bin管理者スクリプトに使用してください。 :)

関連情報