一个crontab文件中如何运行多个Cron任务

6
我想实现两个具有不同执行时间的cronjobs。一个cron job是用于发送电子邮件,另一个cron job是用于验证我的应用程序订阅。
我编写了一个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。

2
当您手动运行它时,是否使用与cronjob相同的用户?您还可以通过将输出导入日志文件进行调试:0 * * * * php script.php > /tmp/errors.log - Mike B
你在 crontab 文件中使用了绝对路径吗? - mcriecken
当我手动运行脚本时,我是从浏览器中运行的,所以没有用户。 :( - ashutosh
1
你需要在控制台上运行脚本,就像从crontab运行一样,以调试权限/路径问题:sudo -u <cron用户> <与cronjob中完全相同的内容> - Mike B
@ashutosh,你解决了这个问题吗? - Faizan Khattak
显示剩余3条评论
5个回答

10

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

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

建议:

1)只需调试第二个作业出了什么问题。

2)可能是路径问题,权限问题;很可能是环境问题(“cron”环境可能与同一用户从命令行使用的环境不同)。

附言:

也可以尝试以下内容:


2

检查拥有者的电子邮件,看是否已经向其发送错误报告。

如果您需要成为某个用户并且希望该用户的环境更改您的调用,请更改您的调用:

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

如果您的脚本只能从特定目录中运行,请使用以下命令:
cd /path/to/ && ./sub.php

1

您需要在配置文件末尾添加一个空行。


已经在这个答案中解释了:https://dev59.com/d2rXa4cB1Zd3GeqPAZTX#53901442 - Eric Aya

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

0
我从未在一个cron-tab文件中实际执行过两个cronjobs,而是让一个cronjob每15分钟执行一次,并查询数据库或查看配置文件以确定要执行的任务,也许这个概念可以帮助你。

基本上,我的两个cron作业的工作方式非常不同,一个用于发送邮件,第二个用于每15分钟检查我的应用程序订阅,其中有很多代码,这就是为什么我不想搞砸它的原因。;) - ashutosh
我在我的crontab中做了类似的事情,但我发现被初始化的资源(许多用户)大多相同,因此我将其合并为一个进程,这样当两个脚本同时启动时,我只需要初始化所有资源一次,那时候节省了很多执行时间 :) - Vengarioth
我在我的crontab中做了类似的事情,但我发现被初始化的资源(很多用户)大部分都是相同的,所以我将它们合并到一个进程中,这样当两个脚本同时启动时,我只需要初始化所有资源一次,那时节省了很多执行时间 :) - Vengarioth
@paulsm4:但也许我做不到,您能详细解释一下吗? - ashutosh
2
@ashutosh - 你所做的是完全正确的。在你的crontab中有两行应该意味着会执行两个任务。无论第二个任务出了什么问题都是“其他原因”。你必须调试任务本身出了什么问题。 - paulsm4
那么如果你有一个每周的工作和一个每天的工作,你会将它们合并成一个进程吗?这似乎不太对。如果你有一个想要在早上运行的工作和另一个想要在晚上运行的工作怎么办?我们的crontab文件通常有数十个不同的工作。如果你可以在一个工作中完成所有事情,那么你的业务需求一定非常简单。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接