在自定义插件中安排一些工作

时间:2016-07-24 作者:pouria

我想让一个调度器每24小时更新一次数据库中的表。

搜索后,我发现:

if (!wp_next_scheduled(\'jw_cron_hook\')) {
    wp_schedule_event(time(), \'two-minutes\', \'jw_cron_hook\');
}

add_action(\'jw_cron_hook\', function () {

    wp_mail(\'[email protected]\', \'salam\', \'bedone init\');

});
add_filter(\'cron_schedules\', function ($schedules) {
    $schedules[\'two-minutes\'] = array(
        \'interval\' => 120,
        \'display\' => \'Every Two Minutes\'
    );
    return $schedules;
});
它在有人访问我的网站时有效,但在无人访问时无效。我如何创建时间表,以运行是否有人访问我的网站?

1 个回复
SO网友:kaiser

如果要禁用“假”WordPress cron并触发计划的任务,则需要使用真正的cron作业ping WordPress。

如何禁用WP Cron只需在实例中添加一行wp-config.php 文件:

define( \'DISABLE_WP_CRON\', true );
如何设置真正的cron作业最简单的方法可能是打开hostings配置用户界面并一起单击。如果您像我一样对手动点击作业不满意,您可以使用crontab 服务器上的命令。您可以自己搜索,以下是基本信息:

通过SSH连接到服务器中,找出负责PHP进程的用户。ps -efj 将告诉您流程和拥有它的用户进入crontab -u $PHP_USER_NAME -l 要查看此用户的现有作业(例如备份),请向ping服务器添加新的cronjob–some examplesphp, curl/wget.

如果使用PHP,请检查whereis php 获取PHP可执行文件的完整路径。这样,您就不必依赖全局和PATH环境变量:

/usr/local/bin/php /var/www/wp/wp-cron.php
如果您使用wget:

wget -qO - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
差不多就是这样。请记住?doing_wp_cron 查询参数很重要,否则cron将不会运行。

其他信息

crontab有一个内置编辑器:crontab -e 所以你可以全屏输入。

如果您的cronjob抛出错误(因为echo 或者其他不应该存在的东西)并且您只想测试东西,您可以将其路由到>/dev/null 2>&1, 因此,隐藏其输出和错误。你不必那么做。

当您有very long running 任务或运行时间不可预测的任务(如导入内容、返工图像、转换mp3或mp4文件),则您可能有一个仍在运行的cronjob,而另一个cronjob已经启动,因此失败。您可以通过使用crontab替代方案来防止这种情况,如runwhen 有作业队列,或者如果您喜欢Go语言,请使用Jobber.

另一种选择是使用正常运行时间监控服务。这些都是免费的,你可以直接ping你的服务器(见上文wget 示例)无需进行任何设置。

相关推荐