PHPファイルを、cronで実行設定したところ正しく動作しませんでした。
解決策・原因などをご教示ください。
※Linuxについての知識はあまりなく、PLESK上にて操作しています。
※ブラウザからPHPファイルにアクセスすると正常に動いていました。
※エラーメールから、cron上でのPHPファイルのパスの指定は正しいように思われます。
※情報が少ない場合はお知らせください。
■実行したPHPファイルの中身(test.php)
<?php
mail('自分のメール', 'My Subject', 'test');
?>
■エラーとして送信されてきたメール内容
/var/www/vhosts/ドメイン名/httpdocs/test.php: line 1: ?php: No such file or directory
/var/www/vhosts/ドメイン名/httpdocs/test.php: line 2: : command not found
/var/www/vhosts/ドメイン名/httpdocs/test.php: line 3: syntax error near unexpected token `'自分のメール','
/var/www/vhosts/ドメイン名/httpdocs/test.php: line 3: `mail('自分のメール', 'Subject', 'test');'
そもそも通常の PHP スクリプトは Web サーバー上で動くことを前提としているので、
単体のスクリプトとして実行するには別の方法が必要です。
PHP: PHP をコマンドラインから使用する - Manual
おそらく、cron の中には
/var/www/vhosts/ドメイン名/httpdocs/test.php
とだけ書いているのだと思いますが、この場合
php -f /var/www/vhosts/ドメイン名/httpdocs/test.php
と書き直すと動作すると思われます。
そもそも通常の PHP スクリプトは Web サーバー上で動くことを前提としているので、
単体のスクリプトとして実行するには別の方法が必要です。
PHP: PHP をコマンドラインから使用する - Manual
おそらく、cron の中には
/var/www/vhosts/ドメイン名/httpdocs/test.php
とだけ書いているのだと思いますが、この場合
php -f /var/www/vhosts/ドメイン名/httpdocs/test.php
と書き直すと動作すると思われます。
ありがとうございます。
この方法で正常稼動が確認できました。
スクリプトを実行するということは、
そのスクリプトを「サーバにインストールされているどのソフトウェアで実行するのか?」指定しなくてはならないと思います。
今回はPHPです。
WEBアクセスの場合はWEBサーバが拡張子などで、これはPHPだと判断して、
スクリプトをPHPで実行するわけですが、
cron(コマンドライン)から実行する場合はこちらで指定しなくてはなりません。
方法は2つで、
1.PHPプログラムに引数として渡す。
2.スクリプトファイルの冒頭にPHPプログラムの場所を書いてあげる。
1.の場合の例は
/usr/local/bin/php /var/www/vhosts/ドメイン名/httpdocs/test.php
2.の場合の例は
スクリプトファイルの先頭に
#!/usr/local/bin/php
と書きます。
いずれ、実行するソフトウェアの場所(パス)を書いてあげるということです。
それと、該当ファイルに実行権限(パーミッション)も必要です。
実行権限は8進でいくと555とか755とか777でいけると思います。念のため。
エラーについては
はスクリプト冒頭の行をソフトウェアのパスと解釈したとき、そのようなソフトウェア(ファイル)はないということだったり、コマンドとして間違っているといことだと思います。
ありがとうございます。
とても勉強になりました。
ありがとうございます。
この方法で正常稼動が確認できました。