PHP 7.4 FPM を使用した Ubuntu 20.04 での CRON ジョブ実行に関する問題

PHP 7.4 FPM を使用した Ubuntu 20.04 での CRON ジョブ実行に関する問題

クライアントの Web サイトのバックアップを自動化するために、次の 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 (Common Gateway Interface) 実行可能ファイルは、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"

このサイトでは、FPM がインストールされた PHP 7.4 が実行されています。

実行すると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

これは、サイトが使用しているバージョン 7.4 ではなくバージョン 8.0 を示しているため、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ジョブの環境変数を設定できます。crontabman 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasそれぞれの環境での結果を確認します 。

「それぞれ」とはデスクトップを意味します。興味があれば、「非 GUI ターミナル」は後回しにcronすることもできます。batch

関連情報