
寫了一個簡短的 shell 腳本「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)
有什麼建議麼?
更新:
我編寫的腳本(請注意,我更改了文件名,現在是. 另外,我刪除了以shebang/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
帶有合理的預設值(並且對於初學者來說更容易,IMO)。
上面的固定寬度名稱是 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 ...
),或者在腳本的情況下,您需要在腳本解釋器的前面加上路徑,在腳本的情況下,檔案開頭存在正確的hashbang 行。
答案2
使用這個 cron 行代替
* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh
也可以在小時列中使用 */2 每兩小時(所有偶數小時)背景變更一次
題外話建議:這不是一條規則,只是一種將腳本分開的形式,/usr/local/bin
供您管理腳本使用。 :)