经过一定时间后运行命令?

经过一定时间后运行命令?

如果我正在执行一个很长的过程,有什么方法可以执行一些基于时间的命令?

例如,我正在运行一个非常长的进程,运行时间大约为 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!!!"

它执行您的longprocessin a sub-shell,然后监视先前创建的“锁定”文件是否存在。

答案4

提到另一种使用at命令的方法。

play通过像和 这样的命令,notify-send它可以用来获得更明显、用户友好的通知:

  • 显示带有消息的通知弹出窗口
  • 播放声音
# schedule notification
echo "notify-send 'Wake up!' && play ~/Music/alarm.wav" | at "now + 5 minute"

它看起来像这样:
在此输入图像描述


笔记:at命令可以选择执行脚本文件。有关更多功能,请参阅手册页。
默认情况下,这些软件包在您的发行版中可能不可用;所以你可能需要手动安装它们。

相关内容