【发布时间】:2010-10-18 23:23:11
【问题描述】:
我只希望 bash 脚本在它被调用 5 分钟后运行。我做错了什么?
我有命令:
/path/to/my/script | at now + 5 min
但脚本每次都会立即运行。
【问题讨论】:
我只希望 bash 脚本在它被调用 5 分钟后运行。我做错了什么?
我有命令:
/path/to/my/script | at now + 5 min
但脚本每次都会立即运行。
【问题讨论】:
您正在立即执行脚本并将其输出发送到at。您需要将脚本本身的名称发送到at:
echo /path/to/my/script | at now + 5 min
【讨论】:
怎么样:
sleep 300 && /path/to/my/script
【讨论】:
at。我建议你使用&& 而不是;,这样可以取消。
sleep 300 && shutdown -h now
shutdown -P +5
at -f /path/to/my/script -t now +5 minutes
这应该可以安排脚本在特定时间运行。有关“at”命令的更多信息,请尝试linuxmanpages.com。我可能想错了(目前不在linux系统上测试)。
祝你好运
【讨论】:
问题是您正在运行脚本并将输出传送到at 命令。您需要做的是将脚本的路径作为参数运行at 命令。我不确定语法,但 at -h 或 man at 应该会有所帮助。
【讨论】:
命令是从左到右评估的,所以首先你的脚本被执行,它的输出将被传送到 at 命令,这是正常的行为。请查看at man pages 了解更多信息。
【讨论】:
试试这个
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 " "
}
【讨论】: