WordPress:Cron锁定和队列

时间:2016-03-06 作者:ryanka

我有一些CPU密集型脚本,我不想同时运行。脚本有时会重叠并使服务器崩溃。已经达到2GB,mysql容器仍然崩溃。

我有一个crontab设置来点击示例。com/cron。php?do\\u cron=randstr,每15分钟一次。

有没有办法放置一个锁,一次只执行一个cron任务?完成后,下一个将运行。

我知道这可以使用PHP的文件锁定机制来完成(但它不会将下一个任务排队)。不确定WP是否自行完成此操作。

All help appreciated!

1 个回复
SO网友:iantsch

Simple Cronjob Walker

<创建CPTcronjob 为了你的cronjobs
  • 添加相关的post元数据(操作、上次执行的\\u…,以及您需要的任何内容)
  • 创建walker函数

    function my_cronjob_walker() {
        $args= array(
            \'post_type\' => \'cronjob\',
            \'posts_per_page\' => 1,
            \'meta_key\' => \'last_executed\'
            \'orderby\' => \'meta_value\',
        );
        $cronjob = new WP_Query($args);
        if ($cronjob->have_posts()) while ($cronjob->have_posts()) {
            $cronjob->the_post();
            // do your cronjob stuff here
            do_action(get_post_meta(get_the_ID(), \'action\', true);
            update_post_meta(get_the_ID(), \'last_executed\', date(\'c\'));
        }
    }
    if ( ! wp_next_scheduled( \'do_cronjob_walker\' ) ) {
        wp_schedule_event( time(), \'hourly\', \'do_cronjob_walker\' );
    }
    
    add_action( \'do_cronjob_walker\', \'my_cronjob_walker\' );