我把这一行放入 crontab 中:
1 * * * * DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
该脚本是可执行的。
如果将该命令粘贴到终端中——即没有星号的字符串,它可以完美运行:
DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
我试过:
sudo service cron restart
但问题仍然存在。我怎样才能cron
每小时运行一次该命令?
更新。使用 ROOT crontab 可以正常工作:
1 * * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 XAUTHORITY=/home/user/.Xauthority /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
答案1
我猜我对变量处理方式的第一个猜测DISPLAY
是错误的。我认为问题与cron
使用非交互式 shell 有关。使用无限循环的测试脚本read
无法运行。但是,当我通过打开新选项卡进行测试时:
* * * * * DISPLAY=:0 /usr/bin/gnome-terminal --tab -e /home/murukesh/test.sh
它工作得很好。
根据这个SU 问题和这个Ubuntu 论坛帖子,您可能必须使用export
变量$DISPLAY
或使用env
:
1 * * * * env DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
(或者)
1 * * * * export DISPLAY=:0.0 && /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
这可能是由于cron
beingsh
和 not使用的 shell bash
(参见set、export 和 env 之间有什么区别以及我应该何时使用它们?)另请参阅脚本不通过 crontab 运行,但可以独立运行。