【问题标题】:Setting up cron job with Bolt on Plesk 11.5.30在 Plesk 11.5.30 上使用 Bolt 设置 cron 作业
【发布时间】:2014-11-23 15:48:10
【问题描述】:

我正在尝试通过 Plesk 11.5.30 管理控制台使用 Bolt.cm 设置 cron 作业。
Bolt 任务调度器文档:https://docs.bolt.cm/v20/tasks

计划任务

我为apache 用户设置了crontab,如下所示:

Min     H     DM     M     DW     Command
0      */1     *     *     *      /var/www/vhosts/mysite.com/httpdocs/app/nut cron
0      */1     *     *     *      httpdocs/app/nut cron

这里有两个不同命令的原因是我在另一个 Plesk 故障排除线程中读到命令路径应该是相对于域的。我假设如果第一个失败,第二个仍然会运行。我还假设上面会每小时运行一次 cron。

螺栓配置

在我的配置文件中,cron_hour 设置为凌晨 3 点。但是,由于侦听器设置为每小时事件CRON_HOURLY,我假设该设置被绕过/忽略。无论哪种方式,此设置已运行超过 48 小时,但尚未看到任何效果。

螺栓设置

作为测试,我已将以下内容添加到我的 Bolt 扩展程序中,以便它在运行时只需向我发送一封电子邮件(以下内容已被删减以保持简短)。

use \Bolt\CronEvents;

class Extension extends \Bolt\BaseExtension 
{
    function initialize() {
        $this->app['dispatcher']->addListener(CronEvents::CRON_HOURLY, array($this, 'cronNotifier'));
    }

    function cronNotifier() {
        // send email script...
    }
}

我已经测试了我的电子邮件脚本个人,所以我知道它可以工作。使用 cron 作业设置并假定正在运行此功能永远不会被击中。更重要的是,数据库中bolt_cron表仍然是空的。

如果有人可以帮助提出一些建议,我可以尝试运行它,我们将不胜感激。

修复

为了解决这个问题,我将我的计划更改为每 5 分钟执行一次(更快的调试循环)。然后我做了以下发现:

  • 我必须为 nut 文件设置 public 的执行权限(这样 apache 用户才能执行它)
  • 对于我使用的服务器,只有完整路径版本有效

感谢@Gawain 提示我正确的方向。

【问题讨论】:

    标签: cron plesk bolt-cms


    【解决方案1】:

    计划任务

    是的,看起来是正确的。对目录位置的处理最近得到了增强,但您以前需要从 Bolt 目录中调用 nut。

    螺栓配置

    cron_hour 仅适用于每日和更长的时间段。我最近修复了一个错误,它阻止了午夜到凌晨 3 点的每小时任务。

    好的,应该在 Bolt 日志中记录有关运行 cron 事件的跟踪信息。

    如果您运行此程序,您是否看到每小时作业触发器和您发送的电子邮件?

    ./app/nut cron --run=cron.Hourly

    如果这样可行,那么问题出在系统 cron/crontab 上,如果直接编辑,您是否使用 crontab -e

    此外,如果您是较旧的 master 结帐,您可以尝试在 crontab 命令部分添加前缀

    cd /var/www/vhosts/mysite.com/httpdocs &&

    ...在每次调用./app/nut之前

    【讨论】:

    • 对...必须将 nut 文件的权限更改为 744。现在我得到 The "--run" option does not exist. 如果只执行 cron,尽管我看到它每天、每周、每月、每年的任务和 db更新。不过还没有电子邮件。
    • OK... 服务器的crontab 现在正在以nut 文件的555 权限运行。但是我的扩展中的函数仍然没有被执行,我也在其中添加了一个log 方法。
    • 现在工作。我的电子邮件仍未发送,但我需要 cron 的功能已执行,因此我已标记为已修复。将电子邮件视为一个单独的问题。
    • 解决了电子邮件问题。在 Bolt 中,如果您不让控制器返回,那么即使 SwiftMailer 返回收件人数量、抄送、密送等的正确整数,电子邮件似乎也不会发送。
    • 这很奇怪,SwiftMailer 应该在控制器返回之前调度对象。
    猜你喜欢
    • 2014-11-23
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2015-02-10
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多