web-dev-qa-db-ja.com

PHPスクリプトを実行するためにcrontabに作業ディレクトリを変更させる

Cronスケジュールで実行するにはApacheが必要なPHPスケジューラスクリプトがあります。コマンドラインからこのコマンドをテストするとうまくいきます:

$    ! test -e /var/www/html/maintenance.flag && cd /var/www/html/Shell && /bin/php ./scheduler.php --action cron --mode default

以下に示すコマンドをApacheユーザーとして使用してこのスクリプトをテストするか、Apache cronに追加すると、このエラーが発生します。入力ファイルを開けませんでした:./scheduler.php

$    Sudo -H -u Apache bash -c "! test -e /var/www/html/maintenance.flag && cd /var/www/html/Shell &&  /bin/php ./scheduler.php --action cron --mode default"

Scheduler.phpは、リンクおよびソースファイル(chmod ug+rwx scheduler.php ./vendor/vendor/package/src/scheduler.php)で読み取り/書き込み/実行を行うシンボリックリンクであることに注意してください。

私はもともとphp /var/www/html/Shell/scheduler.php --action cron --mode defaultを実行しようとしましたが、PHPスクリプトは同じディレクトリ内のファイルを参照するため、そのディレクトリ内からファイルを実行するにはApache/cronが必要です。

編集

スクリプトファイルを使用してみましたが、同じエラーが引き続き発生しています。

次の内容でcron.shを作成しました。

#!/bin/bash
cd /var/www/html/Shell

#For Testing - remember, this is a symlink file
ls -l 'scheduler.php'

#Run Scheduler
/bin/php ./scheduler.php --action cron --mode always
/bin/php ./scheduler.php --action cron --mode default

でテスト済み:

Sudo -H -u Apache bash -c "! test -e /var/www/html/maintenance.flag && /bin/bash /var/www/html/cron.sh"

出力:

lrwxrwxrwx 1 Apache webroot 53 Oct 26 10:36 scheduler.php -> ../vendor/aoepeople/aoe_scheduler/Shell/scheduler.php
Could not open input file: scheduler.php
Could not open input file: scheduler.php
4
TylersSN

&&test...cd ...および/bin/php...)の各サブ式は異なるサブシェルで実行され、それらの間でコンテキスト($PWDなど)を渡すことはできません。

コマンドをcrontabに入れるのではなく、単純なbashスクリプトでラップし、そのスクリプトをcrontabから呼び出します。例えば。:
In crontab

! test -e /var/www/html/maintenance.flag && /usr/local/bin/maint

そして、/usr/local/bin/maint

#!/bin/bash
cd /var/www/html/Shell
/bin/php ./scheduler.php --action cron --mode default"
6
waltinator