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
&&
(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"