【问题标题】:Linux: Run cron job in foregroundLinux:在前台运行 cron 作业
【发布时间】:2012-09-28 02:10:06
【问题描述】:

在 Linux 中,有没有办法在前台(或交互模式)运行 cron 作业? (我有一个程序会定期运行以接受用户输入并进行一些处理。所以我想将其安排为可以在前台运行的 cron 作业)。

【问题讨论】:

  • 您希望cron 如何与您联系?打开终端、启动 GUI 应用等?
  • 打开终端对我有用。实际上,我不想制作复杂的 GUI 应用程序。我的想法如下:如果我从 shell 手动运行程序,我可以交互地输入。当程序自动运行时,我希望能够做同样的事情。
  • 您可能对expect tcl.tk/man/expect5.31/expect.1.html 感兴趣,但我不确定使用它是否是个好主意。

标签: linux cron foreground


【解决方案1】:

如果您没有 GUI,而您只有终端,请将出口转移到 tty。执行“tty”,它将返回您将输出重定向到的设备。例如,在 Centos 中会是这样的:

/ dev / pts / 0 

然后在crontab -e 你写:

1 * * * * user sh / PATH / TO / SCRIPT> / dev / pts / 0

根据需要调整 crontab 中的时间。它只会在有人打开该终端时运行。

但是人们在寻找问题的标题:

Linux:在前台运行 cron 作业

答案是nohup command_to_run &

1 * * * * nohup user sh / PATH / TO / SCRIPT &

nohup 允许像打开终端一样执行脚本,解决了执行 crontab 的问题。我的意思是当我们创建一个脚本时,例如:

#! / bin / bash

echo "I make it up"

然后我们等待 echo 的输出来处理它。示例:

echo "I make it up"
if [[$? -gt 0]]
then
do something with the output of echo

通过tty终端中的stdout获取echo执行响应。但是从 crontab 中“没有 tty”并且发生崩溃并且 crontab 不执行应用程序。这可以通过nohup 解决。更多信息:man nohup

【讨论】:

    【解决方案2】:

    在您用户的crontab 上试试这个:

    @hourly DISPLAY=:0 xterm -e /path/to/my/script.sh
    

    它将在您的脚本执行时(每小时)打开一个xterm,并在您的脚本退出后退出。当然,您应该修改@hourly 部分以满足您的需要。

    【讨论】:

      【解决方案3】:

      对于cron 中的GUI 脚本,请在shell 中尝试以下行:

      crontab -e
      

      然后在crontab

      0 7 * * * DISPLAY=:0 /PATH/TO/SCRIPT
      

      【讨论】:

      • 根据您的需要调整它,当然;)
      • 我尝试了同样的方法,但它似乎仍然在后台运行。无论如何感谢您的回答。
      • 它对我有用,虽然我必须通过 service cron restart 重新启动 cron :)
      【解决方案4】:

      假设您正在运行 X,您总是可以让它在选定的显示器上打开一个窗口。

      【讨论】:

      • 我假设,你的意思是 Mac OS X。我使用的是 Ubuntu。但是,我希望我的脚本可以在 Ubuntu 和 Mac OS X 上运行。
      • 我的意思是 X windows,en.wikipedia.org/wiki/X_Window_System,你可能正在使用它
      • 是的。猜猜这也是其他人的建议。谢谢。
      • 您应该导出显示变量或将其添加到您的 bashrc 文件中
      猜你喜欢
      • 2012-01-13
      • 2014-04-20
      • 2012-08-18
      • 1970-01-01
      • 2012-12-28
      • 2013-07-16
      • 2013-09-24
      • 2020-05-19
      • 2013-07-02
      相关资源
      最近更新 更多