我认为我的问题与 cron 作业有点相关,但我不完全确定。
假设我有一个脚本 ( /home/me/myscript.sh
) 执行某项操作,可能需要不确定的时间才能完成,例如 10 分钟到 1 小时的范围。我想要的是让脚本运行,并在完成后在一小时内再次运行。是否有任何类型的“调度程序”或我可以用来实现此目的的东西?我正在使用Ubuntu。
答案1
cron
听起来不适合这个;上一次运行完成后一小时可以通过while
循环完成
#!/bin/sh
while :; do
some_job_that_takes_a_while
sleep 3600
done
或者通过at(1)
在作业结束时在一小时内安排下一次运行。
$ cat atat
#!/bin/sh
echo running the job
echo $HOME/atat | at now + 1 hours
$ ./atat
running the job
job 4 at 2015-09-30 17:00
$ date
Wed Sep 30 16:00:19 UTC 2015
$
可能需要进行健全性检查或timeout
在工作中进行检查,以防万一它被卡住,因此后续作业不会运行,直到有人手动杀死它并重新启动。
答案2
最简单的方法是告诉 cron 去做。只需使用它作为 cron 将运行的命令:
/home/me/myscript.sh; sleep 1h; /home/me/myscript.sh
如果您sleep
不支持该h
后缀,请sleep 3600
改用。
或者,编写一个包装脚本,调用它wrapper.sh
:
#!/usr/bin/env bash
/home/me/myscript.sh
sleep 1h
/home/me/myscript.sh
并用 cron 运行它。