Cron 没有执行某个计划任务

Cron 没有执行某个计划任务

我使用的是 lubuntu 桌面,发行版为 Ubuntu 13.10,i686。这是我的问题:在 cron 安排的作业列表中,某个作业没有生效,但在 /var/log/syslog 中跟踪了其执行情况。这是相关日志行:

6月4日 09:06:01 kiosk CRON[14189]: (root) CMD (/usr/bin/xinput set-prop 12 --type=float “坐标变换矩阵” 0 -1 1 1 0 0 0 0 1 >> /tmp/mybackup.log)

这项工作应该旋转触摸屏映射。

我尝试了不同的解决方案:我在 crontab 中用 bash -c "" 替换,我在命令前设置“export DISPLAY=:0.0”(“对于 Unix 环境中的图形相关工作,我们需要首先设置 DISPLAY...”),...还有许多其他!

我知道有很多细节会影响 cron 的执行(路径、环境变量、特殊字符等),现在我没有任何想法了 :(

有谁能给我提个建议吗?我在哪里可以找到问题?提前谢谢!

答案1

xinput配置和测试 X 输入设备。它使用$DISPLAY环境变量来查找要与之通信的 X 服务器,因此您需要定义它,因为 cron 作业不需要 X 窗口。简单的方法是将 crontab 行设置为

env DISPLAY=:0.0 /usr/bin/xinput set-prop 12 --type=float "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1 >> /tmp/mybackup.log  

cronjob 运行时是否有 X 服务器在运行?另外,如果有 X 服务器在运行,它可能使用用户的 X 身份验证凭据运行,并且您的 cron 日志显示您以 身份运行root。如果您没有暴露,并且愿意冒险降低 X 安全性,请尝试运行

xhost +SI:localhost:root  

每次登录时在您的 X 服务器上。或者,以同一用户身份运行 cron 作业,而不是root

答案2

这应该是一个评论,但我无法按照我喜欢的方式格式化评论。

cron将环境与工作环境 进行比较,因此:

$ env | sort >x.environment  
$ crontab -l  
# m h  dom mon dow   command  
*   *  *   *   *     env | sort >cron.environment  
$ sleep 60  
$ ls -l {cron,x}.environment  
-rw-rw-r-- 1 walt walt  112 Jun  8 19:40 cron.environment  
-rw-rw-r-- 1 walt walt 4216 Jun  8 19:38 x.environment  
$ diff {cron,x}.environment  
.......<snip, YMMV>.......  

相关内容