Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不使用cron的情况下,在一个小时内运行可变长度的bash脚本_Bash_Job Scheduling - Fatal编程技术网

在不使用cron的情况下,在一个小时内运行可变长度的bash脚本

在不使用cron的情况下,在一个小时内运行可变长度的bash脚本,bash,job-scheduling,Bash,Job Scheduling,我有一个简单的bash脚本,它运行一些任务,这些任务可能需要不同的时间来完成(从15分钟到5小时)。脚本使用for循环进行循环,因此我可以运行任意次数,通常是背靠背 然而,我被要求让脚本的每一次迭代都在一个小时的顶端开始。通常,我会每小时使用cron并以这种方式启动它,但由于脚本的运行时是高度可变的,这就变得更加棘手 不允许同时运行脚本的多个实例 因此,我想在脚本中加入等待“最重要时刻”的逻辑,但我不确定这样做的最佳方式,或者是否有某种方式(ab)使用“at”或更优雅的方式。有什么想法吗?您仍然

我有一个简单的bash脚本,它运行一些任务,这些任务可能需要不同的时间来完成(从15分钟到5小时)。脚本使用for循环进行循环,因此我可以运行任意次数,通常是背靠背

然而,我被要求让脚本的每一次迭代都在一个小时的顶端开始。通常,我会每小时使用cron并以这种方式启动它,但由于脚本的运行时是高度可变的,这就变得更加棘手

不允许同时运行脚本的多个实例


因此,我想在脚本中加入等待“最重要时刻”的逻辑,但我不确定这样做的最佳方式,或者是否有某种方式(ab)使用“at”或更优雅的方式。有什么想法吗?

您仍然可以使用cron。只需让脚本使用锁定文件。使用
flock
实用程序,您可以执行以下操作:

#!/bin/bash
exec 42> /tmp/myscriptname.lock
flock -n 42 || { echo "Previous instance still running"; exit 1; }

rest of your script here

现在,只需在cron中每小时安排一次作业,如果旧实例仍在运行,那么新实例将简单地退出。不需要清理任何锁定文件

为什么脚本的运行持续时间会影响您是否使用
cron
?如果脚本在所有情况下运行不到一个小时,那么应该没有问题。如果需要更长的时间,那么无论您是否使用
cron
,这都是一个需要解决的问题。您需要告诉我们(在您的问题中,而不是作为注释)是否可以运行脚本的多个副本。如果您每小时启动一次,而5个小时的版本正在运行,那么您有2个(或更多)正在运行的进程副本。我假设这不是您想要的,但从您的问题定义来看并不清楚。
sleep$((60-$(date+%m))*60))
?60秒内就可以拿到。你可以在一秒钟内得到它,如果你捕获了当前的分和秒,并相应地改变了公式,但我不知道这是否值得努力…在60秒内就可以了。谢谢特瓦尔伯格!他们试图用甲骨文的每小时AWR记录这些数据,所以准确度非常高。哦,非常酷——我以前从未听说过flock。这就进工具箱了!非常感谢。