Cron不工作

Cron不工作

编写了一个简短的 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供管理脚本使用。:)

相关内容