如何使用cron每小时在bash中启动交互式shell脚本?
我把这行放在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
我想我对DISPLAY
变量处理方式的第一个猜测是错误的。 我认为这个问题与使用非交互式shell的cron
有某种关系。 使用无限read
循环的测试脚本无法运行。 但是,当我通过打开新标签进行测试时:
* * * * * DISPLAY=:0 /usr/bin/gnome-terminal --tab -e /home/murukesh/test.sh
它工作得很好。
根据这个SU问题和这个Ubuntu论坛post ,您可能必须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
使用的shell是sh
而不是bash
(请参阅set,export和env之间的差异以及何时应该使用每个? )。 另外看一下Script不能通过crontab运行但是工作得很好 。