如果我正在执行一个很长的过程,有什么方法可以执行一些基于时间的命令?
例如,我正在运行一个非常长的进程,运行时间大约为 10 分钟。
5 分钟后,我想运行一个单独的命令。为了便于说明,单独的命令可以是:echo 5 minutes complete
(注意:我不希望命令的完成进度,而只是在指定的时间间隔后执行命令。)
是否可以?
答案1
赶紧跑:
long-command & sleep 300; do-this-after-five-minutes
do-this-after-five-minutes
五分钟后将运行。将long-command
在后台运行。
答案2
有一个衬垫可以做到这一点:
( ( sleep $TIMEOUT ; echo "5 minutes complete") & $COMMAND )
在你的情况下 TIMEOUT=5m 并且 COMMAND 是长命令。
另请参阅我对这篇文章的回答“服务网络重新启动”超时
答案3
你可以使用这个脚本:
#!/bin/bash
TEMPFILE="$(mktemp)"
STARTTIME="$(date +%s)"
(./longprocess; rm -f "$TEMPFILE") &
while [ -f "$TEMPFILE" ]; do
sleep 1s
NOW="$(date +%s)"
if (( (NOW-STARTTIME) % 300 == 0 )); then
echo "$(( (NOW-STARTTIME)/60 )) minute(s) elapsed"
fi
done
echo "Done!!!"
它执行您的longprocess
in a sub-shell
,然后监视先前创建的“锁定”文件是否存在。