如何让程序运行一段固定的时间?

如何让程序运行一段固定的时间?

我正在寻找一种 ubuntu 内置的方法,让您可以在固定的时间内运行脚本、程序或其他任何内容。

我找到了一个可以按照我喜欢的方式执行此操作的程序,但该软件包不适用于 Ubuntu。无论如何,我都希望有内置的东西。

我唯一能想到的就是获取当前时间,然后设置一个从“现在”开始 30 分钟的 cron 作业,这将终止该程序。我希望有一种方法可以在不设置脚本的情况下做到这一点,但如果我需要 - 这不会是世界末日。30 分钟间隔后,我想让我的笔记本电脑进入睡眠模式,但这可以与计时器分开。

提前致谢。

答案1

为什么不使用/usr/bin/timeout

$ timeout --help
Usage: timeout [OPTION] DURATION COMMAND [ARG]...
  or:  timeout [OPTION]
Start COMMAND, and kill it if still running after DURATION.

答案2

我刚刚写了下面的内容并且它似乎有效:

ping google.com& PID=$!; sleep 3; kill $PID

当然,你应该用你想要运行的命令替换 ping,用秒数替换 3。如果你需要更详细的解释,请告诉我。

答案3

一个简单(并且没有经过太多测试)的版本hatimerun

#!/bin/sh

help(){
    echo "Usage"  >&2
    echo "  $0 -t TIME COMMAND" >&2
    exit 1
}

TEMP=`getopt -o t: -n "$0" -- "$@"`

if [ $? != 0 ] ; then 
    help
fi

eval set -- "$TEMP"

while true ; do
    case "$1" in
    -t) timeout=$2; shift  2;;
    --) shift; break;;
    esac
done

if [ -z "$timeout" ]; then
 help
fi

cmd="$*"

$cmd&
echo "kill $!" | at now+$timeout

查看at 的手册页如何指定时间。例如,at最小时间分辨率为 1 分钟。

另一种方法是使用新贵而不是这个脚本。

答案4

使用 Perl:

perl -e "alarm 5; exec @ARGV" systemctl list-timers

使用 timelimit 命令:

sudo apt install timelimit    
timelimit -t5 node app.js

使用超时命令:

timeout -sHUP time command

相关内容