我build立了一个cron的列表,一些cron脚本需要很长时间才能运行(比如1-5个小时,而且每天都在增加)。 我不想同时运行两个cron脚本,因为我没有资源或需要它。 我需要find一个解决scheme,以便计划的脚本不会启动,直到其他脚本完成。 我有10-15克朗的工作,我不想重叠其中的5个。
有没有人有什么build议,我应该更密切地寻求达到我的目标?
A.创build临时锁文件,脚本在运行时将使用它,如果新脚本将会find这个文件 – 它将停止。
即
if [ -a lockfile ]; then exit 0 else touch lockfile fi ... rest of code... rm -f lockfile
B.检查脚本是否已经像ps auxwf | grep blabla一样运行。
使用locking文件的方法可能会导致日常cronjob无法启动的情况。 你有没有考虑过从一个cronjob顺序运行这些工作
#!/斌/庆典/ sh / jobs / somejob1 sh / jobs / somejob2
我build议从一份工作中顺序地运行I / O重型应用程序
你也可以在PHP中使用lockfiles。 我解决了与代码完全相同的问题:
$lockfile='/tmp/'.__CLASS__.'.lock'; // the lockfile should be different for each script $lock=fopen($lockfile, 'w'); if(!flock($lock, LOCK_EX|LOCK_NB)){ // $this->log("This process is already started, i'm exiting."); exit; }
把它放在你的工作脚本的开头。
有一个叫做lockfile-progs的软件包可以在任何debian派生的(可能是其他的)发行版中使用,并且它可以工作。
Sysadvent本月早些时候出现了相同的主题: http ://sysadvent.blogspot.co.uk/2012/12/day-4-zookeeper-for-distributed.html
您可以使用Zookeeper作为跨机器群集的锁文件的分布式锁pipe理器。