如何使用 cron 每小时在 bash 中启动交互式 shell 脚本?

如何使用 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

答案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

这可能是由于cronbeingsh和 not使用的 shell bash(参见set、export 和 env 之间有什么区别以及我应该何时使用它们?)另请参阅脚本不通过 crontab 运行,但可以独立运行

相关内容