我在正确设置以下 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 终端”留待以后使用。