
我在正確設定以下 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
)。
可以在Read 檔案cron
中為所有作業設定環境變數。crontab
man 5 crontab
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每個環境中的結果 。
我所說的「每個」是指cron
桌面,batch
如果您好奇的話,您可以將「非 GUI 終端」留到以後使用。