如何使用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运行但是工作得很好 。