简单的 cronjob 问题(我认为!)

简单的 cronjob 问题(我认为!)

我是 Unix/Linux 新手。我有一个运行 CentOS 和 WHM/cPanel 的 VPS。我委托安装 ASSP Deluxe,这是一个第三方反垃圾邮件解决方案。一切都很顺利。

ASSP Deluxe 配置的 cronjobs 之一是 PHP 脚本,它查找服务器上安装的域/子域列表,并自动重建一个纯文本文件,其中包含这些域的列表(每行一个)。

有问题的 cron 条目是这样的:

*/59 * * * * /usr/local/cpanel/3rdparty/bin/php-cgi /usr/local/assp/deluxe/ex_localdomains.php

我需要做的是手动将一个固定的额外行添加到此文件末尾,其中包含域列表。使用文本编辑器手动执行此操作是可行的,但由于 cronjob 每小时运行一次,所以我的行每小时都会被清除。

简单的方法是在执行的 PHP 文件的末尾添加一些代码来执行此操作,但是 PHP 文件是 ionCube 编码的,所以这是行不通的。

相反,我创建了一个 PHP 脚本,将一行附加到文件末尾。通过 SSH(以 root 身份登录)以这种方式执行此命令...

/usr/local/cpanel/3rdparty/bin/php-cgi /usr/local/assp/deluxe/add_manual_domain.php

...效果很好!它将我需要的行添加到文件末尾。因此,我将 crontab 中的 cronjob(crontab -e)修改为以下内容:

*/59 * * * * /usr/local/cpanel/3rdparty/bin/php-cgi /usr/local/assp/deluxe/ex_localdomains.php && /usr/local/cpanel/3rdparty/bin/php-cgi /usr/local/assp/deluxe/add_manual_domain.php

我假定这将执行重建,然后在重建完成后运行我的脚本将该行添加到文件末尾。

但是,它并没有这样做。文件重建成功,但额外的行没有添加到我的文件中。但是,从命令行手动运行我的小 PHP 脚本是可行的。

有人可以解释一下这个问题吗?

答案1

cron 处理程序对 && 的解释可能与预期不同。(如果不知道使用了哪种 cron 软件,我就无法确切知道发生了什么……)

只需编写一个新的 2 行脚本,其中包含两个 PHP 命令(每行占一行)。实际上,在此脚本中,您也可以将两个文件放在一起,而不是使用 PHP 添加额外的行。

然后从 cron 而不是当前的 cron-line 运行这个新脚本。

这样就容易多了。

PS:不要忘记将脚本的权限设置为“执行”

编辑:刚看到 OG 的评论。“;”可能有效,但(像 && 一样)它有点取决于 crontab 处理事情的具体方式。

相关内容