编写了一个简短的 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
它也带有合理的默认设置(在我看来,对于初学者来说更容易一些)。
上面的固定宽度名称是 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
供管理脚本使用。:)