【问题标题】:Run a command at a specific time在特定时间运行命令
【发布时间】:2011-08-09 17:07:49
【问题描述】:

我正在尝试在特定时间运行命令。我看过“at”命令,但我不知道如何让它工作......

这是我的工作:

at 1843 (Enter)
php /run/this/script.php (Ctrl+D)

但是如何在 bash 脚本中执行此操作?我的意思是,我需要按 Enter 和“Ctrl+D”来设置延迟...如何在脚本中执行此操作?

欢迎提出任何建议。

提前致谢,

【问题讨论】:

  • Cron 用于间隔?我的意思是,我不想按预定时间间隔运行,而是在特定时间运行。
  • 一个特定的时间是一种间隔,如果你想在每天的那个时间或月初。此外,有时将它作为一个常规的 cron 作业来检查它是否需要运行更有意义,而不是让一些脚本安排它;如果脚本不小心重复了两次会怎样?

标签: linux bash command at-job


【解决方案1】:

at 命令默认没有安装到我工作的系统(Ubuntu、RHEL)中,而且我没有安装新软件的权限,所以我使用结合了 bash 和 awk 的脚本为了实现at功能如下:

#! /bin/bash

res=""
while [ ! $res ]; do

    res=$( date | awk -v hour=$1 -v min=$2 '{ 

        split($4, tmp, ":" );

        if( (tmp[1] == hour) && (tmp[2] == min) )
        {
            print "ok";   
        }
        else
        {
            print "";
        }

    }' )

done

./atReplacement.sh $HOUR $MIN; [OTHER_COMMANDS]

【讨论】:

  • 你为什么不用sleep?如果我理解得很好,您的脚本将一次又一次地运行两个命令(dateawk),直到预期的时间!您应该计算等待的剩余时间并改用sleep
【解决方案2】:

您可以将命令回显到at 作为输入:

echo "/usr/bin/php /run/this/script.php" | at 18:43

【讨论】:

  • 嘿,谢谢。我试图在 1847 上运行 Firefox,但没有成功。这是命令: echo "/usr/bin/firefox" | 1847 年
  • 假设你的意思是下午 6:47 试试 18:47
  • 嘿,我也试过 18:47,这两种语法似乎都是有效的,并被添加到作业队列中。 Firefox 并没有出现...
  • 我的测试也不适用于 Firefox。这可能与 X 服务器环境有关。不过,您使用 PHP 脚本的初始示例也可以。
  • @user22180 使用at 调度的作业被分配了一个作业ID,您可以通过运行atq 或读取at 的输出来找到它,这类似于job 22 at ....。然后使用atrm 命令通过其ID 从队列中删除该作业。查看手册页:man at
【解决方案3】:

你可以试试这个:

at 1843 <<_EOF_
php /run/this/script.php
_EOF_

编辑如果你想做的是运行 Firefox,试试这个:

at 1843 <<_EOF_
DISPLAY=:0.0 /usr/bin/firefox
_EOF_

【讨论】:

  • 那么当“at”运行程序时,可能是它无权访问X显示;在运行浏览器之前,您可以尝试确保“DISPLAY”环境变量设置为“:0.0”或inside“at”脚本。
【解决方案4】:

bashzsh 你可以说

at 1843 <<< 'php /run/this/script.php'

否则,您需要使用此处的文档:

at 1843 <<EOF
php /run/this/script.php
EOF

您可能还想查看cron 以获取定期安排的工作; crontab 条目看起来像

43 18 * * * php /run/this/script.php

(编辑:哎呀,有助于回忆at 的哪个版本。我认为这可能是本地模组。)

【讨论】:

  • 嗨,当我运行你的 at 命令时,我得到:语法错误。最后看到的令牌:p 乱码时间
  • 没问题,你以后不会知道怎么打开firefox吧?即 /usr/bin/firefox 不工作...
  • atcron 通常都不能访问窗口系统。您应该能够获取$DISPLAY$XAUTHORITY 的值,然后使用env 在工作中设置;通常只有env DISPLAY=:0 /usr/bin/firefox 将作为命令工作。
  • 太棒了!非常感谢。我通过将行 export DISPLAY=:0.0 添加到我的脚本中来让它工作...
【解决方案5】:

echo "php /run/this/script.php" | at 18:43

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多