18

我只想要一个 bash 脚本在它被调用后运行 5 分钟。我究竟做错了什么?

我有命令:

/path/to/my/script | at now + 5 min

然而脚本每次都会立即运行。

4

6 回答 6

50

您正在立即执行脚本并将其输出发送到at. 您需要将脚本本身的名称发送到at

echo /path/to/my/script | at now + 5 min
于 2010-10-18T23:26:44.410 回答
28

怎么样:

sleep 300 && /path/to/my/script
于 2010-10-18T23:26:00.543 回答
7
at -f /path/to/my/script -t now +5 minutes

这应该可以安排脚本在特定时间运行。有关“ at”命令的更多信息,请尝试linuxmanpages.com。我可能想错了(目前还没有在linux系统上测试)。

无论如何祝你好运

于 2010-10-18T23:43:52.340 回答
2

问题是您正在运行脚本并将输出传递给at命令。您需要做的是at将脚本的路径作为参数运行命令。我不确定语法,但at -h或者man at应该有所帮助。

于 2010-10-18T23:28:04.440 回答
1

命令是从左到右评估的,所以首先你的脚本被执行,它的输出将被传送到 at 命令,这是正常的行为。请查看 at手册页以获取更多信息。

于 2010-10-18T23:27:25.097 回答
0

试试这个

sys.scheduled_run /path/to/my/script 5

主功能

function sys.scheduled_run(){
    local PATH_TO_ACTION MINS SLEEPTIME
    PATH_TO_ACTION=$1
    MINS=$2
    SLEEPTIME=$(($MINS * 60))
    echo "Sleeping for $MINS minute ($SLEEPTIME seconds) and then running $PATH_TO_ACTION"
    ui.countdown $SLEEPTIME
    $PATH_TO_ACTION
    echo "Done"
    if [ "REPEAT" == "$3" ] 
    then
        echo "Going for Repeat"
        sys.scheduled_run "$@"
    fi
}

倒计时功能

function ui.countdown(){ #USAGE ui.countdown 60 countdown for 60 seconds
        local SECONDS=$1
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START
        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%02d:%02d:%02d" \
                        $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        echo "        "
}
于 2011-05-21T14:16:04.777 回答