
クライアントの 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
ジョブの環境変数を設定できます。crontab
man 5 crontab
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
それぞれの環境での結果を確認します 。
「それぞれ」とはデスクトップを意味します。興味があれば、「非 GUI ターミナル」は後回しにcron
することもできます。batch