我使用的是 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>.......