首先:
这不是重复的通过 cronjob 创建的 Cronjobs 不起作用这似乎可以通过简单地授予脚本执行权限和/或#!/bin/bash
在脚本开头添加来解决。
我尝试过网络、论坛和其他地方发布的一些建议,但还没有成功。
风景:
我在尝试/usr/bin
通过 cronjob 运行自定义脚本时遇到了一些问题。例如:我使用带有 i3WM 平铺窗口管理器的 Ubuntu 14.04.3,在其中尝试运行名为的自定义脚本,该脚本应通过命令wall
行更改壁纸。feh
当通过终端或 i3wm 菜单栏调用时,墙上脚本确实运行良好,这表明脚本应该运行,但是,它却没有运行。
剧本
wall
当我通过查找脚本时whereis wall
,终端显示以下结果:
wall: /usr/bin/wall /usr/bin/X11/wall /usr/share/man/man1/wall.1.gz
/usr/bin
我不知道为什么我在和目录中都有该脚本的副本,/usr/bin/X11
但当我手动运行它时,它们都执行相同的操作。当我将它放在 crontab 上时,这两个都不执行任何操作。
脚本内容如下:
feh --bg-scale "`shuf -n1 -e ~/.i3/wall/*`"
此命令将从 ~/.i3/wall 文件夹中获取随机图像,并将该图像缩放到桌面大小,以用作背景图像。
脚本文件属性如下所示:
geppettvs@T400:~$ ls /usr/bin -l | grep wall
-rwxr-xr-x 1 root root 2067448 oct 21 2013 fotowall
-rwxr-xr-x 1 root root 6264 oct 27 09:21 kwalletd
-rwxr-sr-x 1 root tty 45 ene 27 07:51 wall
-rwxr-xr-x 1 root root 1747 abr 25 2014 wallpaper-changer
我刚刚注意到该属性仅在脚本中的“tty”上有所不同,我将其更改为 root 后就chown
没有任何区别。
crontab
我的用户的 crontab 当前包含以下内容:
GNU nano 2.2.6 File: /tmp/crontab.Fb84OE/crontab
# m h dom mon dow command
# * * * * * /home/geppettvs/wifirc.sh # JOB_ID_2
* * * * * /usr/bin/wall # JOB_ID_4
我的根用户 crontab 如下所示:
# m h dom mon dow command
@reboot sudo iwconfig wlan0 rate 54M
* * * * * wall
但是,用户的 crontab 和 root crontab 都不会对该脚本执行任何操作。
请记住,这次我谈论的是一个简单的壁纸更换器脚本。但我还有一些其他脚本,当我将它们放入 crontab 中时,它们不会运行。
其他尝试
我已经尝试#!/bin/bash
在脚本的第一行使用,在脚本和/或 crontab 文件的顶部/底部保留或删除空白行。但似乎没有效果。尝试使用绝对路径或仅通过名称调用脚本(确实在终端上有效)也是如此。
日志
日志如下:
Feb 13 17:20:01 T400 CRON[9093]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:20:01 T400 CRON[9094]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:21:01 T400 CRON[10290]: (geppettvs) CMD (/usr/bin/wall # JOB_ID_4)
Feb 13 17:21:01 T400 CRON[10291]: (root) CMD (wall)
Feb 13 17:21:01 T400 CRON[10289]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:21:01 T400 CRON[10288]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:22:01 T400 CRON[11575]: (geppettvs) CMD (/usr/bin/wall # JOB_ID_4)
Feb 13 17:22:01 T400 CRON[11578]: (root) CMD (wall)
Feb 13 17:22:01 T400 CRON[11573]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:22:01 T400 CRON[11574]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:23:01 T400 CRON[12860]: (geppettvs) CMD (/usr/bin/wall # JOB_ID_4)
Feb 13 17:23:01 T400 CRON[12862]: (root) CMD (wall)
Feb 13 17:23:01 T400 CRON[12859]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:23:01 T400 CRON[12858]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:24:01 T400 CRON[14157]: (root) CMD (wall)
Feb 13 17:24:01 T400 CRON[14158]: (geppettvs) CMD (/usr/bin/wall # JOB_ID_4)
Feb 13 17:24:01 T400 CRON[14155]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:24:01 T400 CRON[14156]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:25:01 T400 CRON[15448]: (geppettvs) CMD (/usr/bin/wall # JOB_ID_4)
Feb 13 17:25:01 T400 CRON[15450]: (root) CMD (wall)
Feb 13 17:25:01 T400 CRON[15447]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
Feb 13 17:25:01 T400 CRON[15446]: (geppettvs) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
这似乎正在运行脚本,但是每次脚本运行迭代时都没有发生任何事情。
问题
我是不是做错了什么?或者我应该尝试其他什么?
任何帮助都将受到赞赏。
更新
正如评论中提到的那样j0h 的建议,我也尝试使用图像文件夹的绝对路径。
命令现在看起来像
feh --bg-scale "`shuf -n1 -e /home/geppettvs/.i3/wall/*`"
它确实在终端上运行,但不能通过 cron 运行。
我猜测问题出在重音符号 (`) 上,它可能会导致 cronjob 执行中断。
尽管如此,我还是尝试将重音符更改为其他符号,之后该命令在任何地方都停止工作。您可以看到终端的输出,如下所示:
geppettvs@T400:~$ feh --bg-scale "'shuf -n1 -e /home/geppettvs/.i3/wall/*'"
feh WARNING: 'shuf -n1 -e /home/geppettvs/.i3/wall/*' does not exist - skipping
feh: No loadable images specified.
See 'man feh' for detailed usage information
欢迎任何帮助改进此命令的帮助。提前致谢。