在没有crontab的情况下运行php脚本

时间:2015-04-17 12:07:23

标签: php cron

我的crontab有大约200多个预定作业,而且很难记住什么时候和什么参数应该运行。并且更难记住所有脚本名称。如果团队中的某个人会删除某些工作,我会遇到麻烦 - crontab会被备份,但是会重新调试它,我应该警惕某些内容被删除或者只是通知了。

因此,我正在考虑创建一个单一的cron作业,该作业将启动所有其他作业,这些作业将保存在数据库中并通过Web界面进行管理。

我现在有一个问题。它是如何网站crontab般的频率 - 我的意思是这样的:* * 1 * *。当我的单个脚本启动时,应该很容易知道应该运行wchich脚本。我需要一个建议,因为到目前为止我所能想到的 - 是每次运行时测量时间()%。

1 个答案:

答案 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 ...

获取

让我知道是否有任何问题...