在特定时间运行命令

时间:2011-04-20 17:40:04

标签: linux bash command at-job

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

这就是我的所作所为:

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

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

欢迎提出任何建议。

提前致谢,

5 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:13)

你可以试试这个:

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

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

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分: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]