24

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

这就是我所做的:

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

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

欢迎提出任何建议。

提前致谢,

4

5 回答 5

32

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

echo "/usr/bin/php /run/this/script.php" | at 18:43
于 2011-04-20T17:44:17.773 回答
13

你可以试试这个:

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

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

at 1843 <<_EOF_
DISPLAY=:0.0 /usr/bin/firefox
_EOF_
于 2011-04-20T17:43:27.207 回答
8

或者你bash可以zsh

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。我认为这可能是本地模组。)

于 2011-04-20T17:42:54.060 回答
2

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

于 2011-04-20T17:43:59.507 回答
1

我工作的系统(Ubuntu、RHEL)默认不安装at命令,而且我没有安装新软件的权限,所以我使用结合 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]

于 2014-05-07T09:55:12.987 回答