我的crontab有大约200多个预定作业,而且很难记住什么时候和什么参数应该运行。并且更难记住所有脚本名称。如果团队中的某个人会删除某些工作,我会遇到麻烦 - crontab会被备份,但是会重新调试它,我应该警惕某些内容被删除或者只是通知了。
因此,我正在考虑创建一个单一的cron作业,该作业将启动所有其他作业,这些作业将保存在数据库中并通过Web界面进行管理。
我现在有一个问题。它是如何网站crontab般的频率 - 我的意思是这样的:* * 1 * *。当我的单个脚本启动时,应该很容易知道应该运行wchich脚本。我需要一个建议,因为到目前为止我所能想到的 - 是每次运行时测量时间()%。
答案 0 :(得分:1)
include()
单个文件中的所有cron脚本,
所以当cron作业将在那时运行它将运行所有其他脚本,但时间将是相同的..
现在解决时间问题, 创建两个数据库表
1) Cron
id(int 11) name(varchar) flag(enum)
Auto Increament ID name of php file enabled/disabled
2) CronTimings
id(int 11) fk_cron_id (int 11) time (time) day(varchar)
Auto incr foreign key of first table time to run the script CSV days (i.e. Mon,Tue,Wed)
和一个主表,用于存储上次运行主cron时的值
last_ran_time (time)
value of last time when
cron has ran
注意:第二个表可以有fk_cron_id
个多个条目。 (一个脚本可以有多个时间)
现在在你的单个cron文件中
$last_ran = "05:02:15"; // from the master table
$day = date('D');
$qry = "select * from cron c
left join cronTimings ct on ct.fk_cron_id = c.id
where ct.id in (select id from cronTimings where day like = '%".$day."%') and ct.time between '$last_ran' and '".date('H:i:s')."'";
//fetch data
foreach($crons as $crn)
{
include($crn['file'])
}
你可以每隔半小时或一小时运行一次这个文件,所以如果必须在这段时间之间运行任何cron,它将使用mysql between
...
让我知道是否有任何问题...