如何在一分钟后启动shell脚本?
假设有两个bash文件a.sh和b.sh
我想在a.sh执行后的一分钟(或几秒钟)执行b.sh
那么我应该在a.sh中编写什么代码?
假设有两个bash文件a.sh和b.sh
我想在a.sh执行后的一分钟(或几秒钟)执行b.sh
那么我应该在a.sh中编写什么代码?
简单易懂。您需要使用“at”来安排任务,使用“date”来计算未来的时间。
示例:
echo b.sh | at now + 1 minute
或者:
echo b.sh | at -t `date -v+60S "+%Y%m%d%H%M%S"`
-v+60S
增加 60 秒到当前时间。您可以精确控制要添加多少秒。
但通常情况下,当人们希望一个程序在另一个程序之后一分钟启动时,并不能百分之百确定它不会花费更多或更少的时间。 b.sh
可能会在 a.sh
完成之前启动,或者 a.sh
可能比“计划”的时间提前了 30 秒,而 b.sh
可能已经更快地启动了。
我推荐使用不同的模型。其中 b.sh
首先启动。
a.sh
在启动时创建临时文件,在执行完其任务并在结束时删除其临时文件。
b.sh
监视该临时文件是否被创建,然后被删除。并开始执行其任务。
让a.sh的最后一行为:
sleep 60 && b.sh
sleep
:a.sh
sleep 60
b.sh
对于更复杂的情况,您可以使用at
命令:
echo b.sh | at now + 1 minute
请参阅at
命令的手册以获取更多信息。
at
命令无法进行精确到一分钟以内的时间增量。 - Dennis Williamsonb.sh &
这是第二个:
sleep 10
# more commands
你可以将秒数作为参数从第一个传递到第二个。
不幸的是,at
不支持精确到一分钟以内的时间增量。
在cron中安排两个脚本同时运行,并在b.sh中设置所需的延迟。
sleep 1m
然后当您想要调用第二个脚本时
bash a.sh
echo b.sh | at now + 1 minute
。 - Dennis Williamson