【问题标题】:Multiple Cron jobs in one crontab file一个 crontab 文件中的多个 Cron 作业
【发布时间】:2012-10-27 23:14:03
【问题描述】:

我想实现两个具有不同执行时间的 cronjobs。一项 cron 作业用于发送电子邮件,另一项 cron 作业用于验证我的应用程序订阅。

我写一个crontab文件,写两个cronjob如下:

2 * * * * path to mailCronjob mail.php
20 * * * * path to check my application's subscriptions sub.php

问题是第一个 cronjob 工作正常。邮件可以正常发送,但第二个 cronjob 不管用。我尝试手动运行第二个作业,它也可以正常工作。

我正在使用命令将 cronjob 设置为:

crontab crontab_file

当我发出命令时crontab -l 它还在命令行中显示了这两个 cronjob。

我想问一下,我是否在这里遗漏了什么,或者我应该怎么做才能运行这些 cronjobs。

【问题讨论】:

  • 当您手动运行它时,您是否使用与 cronjob 相同的用户?您还可以通过将输出传递到日志文件来进行调试:0 * * * * php script.php > /tmp/errors.log
  • 您是否在 crontab 文件中使用绝对路径?
  • 当我现在手动运行脚本时,我是从浏览器运行的。所以,没有用户。 :(
  • @spaceman817 :是的,我正在使用脚本的绝对路径
  • 您需要像从 crontab 运行脚本一样在控制台上运行脚本来调试权限/路径问题:sudo -u <cron user> <exactly what is in the cronjob>

标签: php ubuntu cron crontab


【解决方案1】:

你需要在配置文件的末尾添加一个空行

【讨论】:

【解决方案2】:

我记得同样的问题。出于某种原因,我不得不在我的第二个 cron 作业之后按 enter。即使在第一个 cron 作业中,如果它是唯一的作业,也需要 CR/LF(enter)。光标需要在第二行(如果有一个 cron 作业)...光标需要在第三行,如果有两个 cron 作业。我想,需要完全读取文件才能解释 cron 作业命令。我只是分享这个,因为如果你不这样做,只会执行第一个作业,并且完全跳过第二个作业,除非在第二个作业结束时按下 enter。最好的问候和欢呼……测试一下,让我们知道。

【讨论】:

    【解决方案3】:

    检查拥有用户的电子邮件并查看是否已向其发送错误报告。

    如果您需要成为某个用户并让该用户的环境将您的调用更改为

    su - -c "/path/to/sub.php" SubScriptUser
    

    如果您的脚本仅适用于某个目录,请使用

    cd /path/to/ && ./sub.php
    

    【讨论】:

      【解决方案4】:

      事实:您可以从单个 crontab 文件中运行任意数量的 cron 作业。

      事实:您还可以以 不同 用户的身份运行 不同 作业,每个用户都有自己的 crontab 文件。

      建议:

      1) 只需调试您的第二份工作出了什么问题。

      2) 可以是路径,也可以是权限;这很可能是环境(“cron”的环境可能与命令行中同一用户的环境不同)。

      PS:

      也试试这个:

      【讨论】:

        【解决方案5】:

        我从来没有在一个 cron-tab 文件中执行 2 个实际的 cronjob,而是让一个 cronjob 每 15 分钟执行一次并查询数据库或查看配置文件有哪些任务要执行,也许这个概念对你有帮助。

        【讨论】:

        • 基本上我的两个 cron 作业的工作方式非常不同,一个用于发送邮件,第二个用于每 15 分钟检查一次我的应用程序订阅,代码很多,这就是为什么我不 wnat搞砸它。;)
        • 我用我的 crontab 做了类似的事情,但我发现初始化的资源(很多用户)大部分相同,所以我将它合并到一个进程中,所以当两个脚本同时启动时我只必须初始化所有资源一次,节省了大量的执行时间:)
        • 我用我的 crontab 做了类似的事情,但我发现初始化的资源(很多用户)大部分相同,所以我将它合并到一个进程中,所以当两个脚本同时启动时我只必须初始化所有资源一次,节省了大量的执行时间:)
        • @paulsm4 :但也许,我做不到,你能详细说明一下吗?
        • @ashutosh - 你所做的一切都很好。 crontab 中的两行应该意味着执行了两个作业。时期。第二份工作出了什么问题都是“别的东西”。您必须调试作业本身的问题。
        猜你喜欢
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 2014-04-04
        相关资源
        最近更新 更多