在 Ubuntu 20.04 上使用 PHP 7.4 FPM 执行 CRON 作业时出现问题

在 Ubuntu 20.04 上使用 PHP 7.4 FPM 执行 CRON 作业时出现问题

我在正确设置以下 CRON 作业以自动备份客户网站时遇到了问题。

该网站基于 Joomla,我使用 Akeeba Backup 来处理备份。命令行 CRON 作业的建议如下:

在主机的 CRON 界面中使用以下命令:/path/to/php /var/www/domain.com/cli/akeeba-backup.php

请记住将 /path/to/php 替换为您主机的 PHP CLI(命令行界面)可执行文件的实际路径。请记住,您必须使用 PHP CLI 可执行文件;PHP CGI(通用网关接口)可执行文件无法与我们的 CRON 脚本配合使用。如果不确定这意味着什么,请咨询您的主机。他们是唯一可以提供此信息的人。

使用 domain.com 作为示例

我已经在 Ubuntu 20.04 上安装并运行 CRON。

以下代码位于crontab -e

0 3 * * * /usr/bin/php7.4 /var/www/domain.com/cli/akeeba-backup.php --profile=1 --description="Full automated backup"

该网站运行的是 PHP 7.4,并且安装了 FPM。

当我运行时,which php返回以下内容:/usr/bin/php

当我运行时,ls -l /usr/bin/php返回以下内容:lrwxrwxrwx 1 root root 21 Aug 31 18:09 /usr/bin/php -> /etc/alternatives/php

当我运行时,ls -l /etc/alternatives/php返回以下内容:lrwxrwxrwx 1 root root 15 Aug 31 18:53 /etc/alternatives/php -> /usr/bin/php8.0

由于这显示的是版本 8.0 而不是网站正在使用的 7.4,这是否意味着 CRON 作业应该使用版本 8。

示例日志输出来自/var/log/syslog

Oct 1 11:39:01 domain CRON[38538]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi)

任何帮助是极大的赞赏。

答案1

通过 运行的作业cron不会在与桌面相同的运行时环境中运行。您的任何PATH更改或其他环境变量设置都~/.bashrc不会自动传播到您的cron作业中。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

我所说的“每个”是指cron桌面,batch如果你好奇的话,你可以将“非 GUI 终端”留待以后使用。

相关内容