我有一个.sh文件,其中包含以下内容:
while [ 1 ]; do
cd /path/to/cron/
touch /var/crons/logs/Process1/`date +%Y%m%d`.log
php -f Cron.php arg1 >> /path/to/log/`date +%Y%m%d`.log
sleep 15
done
每隔15秒检查一个新作业,然后运行整个作业。完成后,等待15秒再次检查。如果找到一个,它就可以完成整个工作,而无需运行任何其他进程。
我不想每5秒就有一个正式的cron,因为一项工作可能需要10分钟,这将导致一次进行相当多的进程。但是,我希望在15秒内将此文件调用三次。我的想法是开始相隔5秒钟的工作,但是如果它们最终相隔1秒,等待12秒,那也没关系。
以下是我在/etc/rc.local中的内容(在服务器启动时启动它)
./path/to/cron/CronFile.sh
我尝试过多次拨打电话,但它从未完成第一次通话,因此从不转移到第二次通话。我尝试使用at
命令在将来的一分钟内对其进行策划,但这也不起作用,并且三个命令仍会导致一个命令运行。
我如何最初安排作业在每个作业之间等待15秒,但是有三个独立的进程按照自己的时间表运行?
答案 0 :(得分:0)
我会回答你的问题
我如何最初安排作业在每个作业之间等待15秒,但是有三个独立的进程按照自己的时间表运行?
但并非完全如此,相反,我提供了一个最多运行的方法,一次运行3个作业,并检查新作业是否应该每15秒启动一次(考虑到检查时运行的作业少于3个) )。
这样做的方法是使用变量ACTIVE_JOBS 然后有一个函数start_job。 在你的while循环中,每15秒,你迭代任何新任务,如果有的话,你检查是否有ACTIVE_JOBS -lt 3,如果是,你start_job。
start_job首先增加ACTIVE_JOBS,然后在退出之前调用php并减少ACTIVE_JOBS。