• ベストアンサー

crontabでPHPスクリプトが実行出来ない

crontabで毎分PHPのスクリプトを起動する記述をしましたが、すべて下記エラーが出て実行されません。 phpスクリプトの先頭で「#!bin/usr/php」を書く方法と、crontabで「* * * * * /usr/bin/php test.php > dev/null」とする方法を試してみましたが両方ともダメでした。 解決索があればご教示下さい。 【エラー内容】 test.php: line 1: ?php: No such file or directory

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.3

>phpスクリプトの先頭で「#!bin/usr/php」を書く方法と は、「#!/bin/usr/php」のタイプミスだとして、 >test.php: line 1: ?php: No such file or directory そのメッセージは、sh test.php としたときに出るメッセージですね。つまり、 * * * * * /bin/sh /パス/test.php と書いたときに出ます。 * * * * * /usr/bin/php /パス/test.php で、そういうメッセージが出ることはあり得ないと言っていいです。間違いは無いでしょうか? * * * * * /パス/test.php と書いた場合でも、一行目の先頭二文字が #! でないとかですね。

その他の回答 (2)

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.2

>crontabで毎分PHPのスクリプトを起動する記述を この手のエラーの原因はPATHが見つからないことに起因することが多いです。 要は、テストでは成功するのにcrontanに登録したら実行されない場合は「ls」でも「/bin/ls」など全てのコマンドを暗黙のPATHではなく明確に絶対PATHでコマンドを記述するとテストと同じように実行されるようになるはずです。

simizukiyo
質問者

補足

回答ありがとうございます。 > この手のエラーの原因はPATHが見つからないことに起因することが多いです。 そう考えて、crontabの記述で、phpのフルパスを書いてみたのですがダメでした。 phpのパスは「which php」した結果「/usr/bin/php」だったので、これを追記してみました。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>test.php: line 1: ?php: No such file or directory は >phpスクリプトの先頭で「#!bin/usr/php」を書く の時…ですよね? 相対パスで記述することに何か意味があるのでしょうか? crontab実行時のカレントパスがどこになるのかはちょっと不明ですが、そこの下にbinディレクトリはありますか? というか…「#!/bin/usr/php」の書き間違いではありませんか? # まぁ、/bin/usr/phpがあるのかどうかは確認する必要があるでしょうが。 >crontabで「* * * * * /usr/bin/php test.php > dev/null」とする方法 記述したcrontabの場所はどこです? あと、エラー内容は? ユーザー毎に処理される/var/lib/cron/などと、システムとして処理される/etc/crontabでは書式が異なる。という場合がありますが。 # /etc/crontabだとコマンドの前に実行するユーザー名を記述する。ということがある。

simizukiyo
質問者

補足

回答ありがとうございます。 > というか…「#!/bin/usr/php」の書き間違いではありませんか? 仰るとおりです。 こちらに書く時にbinの前のスラッシュが抜けておりました。 ですので、実際にはこの記述があってもなくても該当のエラーが出ている状況です。 > 記述したcrontabの場所はどこです? 今crontab.txtというファイルを作って、cronユーザに変身してから、「crontab crontab.txt」として追記しています。 このcrontabの場所ですが、「/var/spool/cron/ユーザ名」にあるとのことだったので、lsしてみると、「/var/spool/cron」の下は空でした。 逆にお聞きしたいのですが、今編集しているcrontabの場所はどうやって確認出来るのでしょうか(汗) > あと、エラー内容は? エラーの内容は先ほどしめした通り、下記のようなエラーが出ています。 test.php: line 1: ?php: No such file or directory

関連するQ&A

  • crontabをshellで実行するには?

    Linux(Centos 6.2)でユーザを追加する際に、 そのユーザ権限で定期的に実行するプログラム(getmail)を設定したいと思っています。 で、shellでユーザを追加しようと思って #!/bin/sh # $1 = user $2 = pass $USRDIR = ユーザのホームディレクトリ useradd -d $USRDIR $1 echo "$1:$2\n" | chpasswd chown -R $1 $USRDIR chmod -R 770 $USRDIR echo "*/1 * * * * $1 /usr/bin/getmail 2>/dev/null\n" >> /etc/crontab としようと思ったのですが、 色々なサイトで、「crontabの設定ファイルを直接書くのは良くない、crontabコマンドを使え」と言われており、 crontabで設定したいのですが、crontab -u $1 -e とすると、viが起動してしまい、 どうしたら良いかわかりません。。。 どうしたら良いのでしょうか? お願いします。

  • cronで実行できない

    crontab -e  で記述をしたけれど動作しないので色々調べて毎分動くようにしてみたり色々試した物の動きません。現在以下のような記述になってます。どう直したらいいですか。OSはDebian sargeでcronでなく手で動作させると正常です。 SHELL=/bin/sh */1 * * * * /usr/bin/biffpop -c /root/.biffpoprc > /dev/null 2>&1

  • シェルスクリプトからPHP実行

    シェルスクリプト(bash)内で、以下のようにPHPを呼んだ場合、 その次の処理がPHPの終了を待たずに実行されるようなのですが、 どうしてでしょうか? #!\bin\bash /usr/local/php4/bin/php /home/test.php echo "test!" 以上 なぜか test! という表示がPHPの処理中に出るように思えます。

  • シェルスクリプトでPHPを実行したい

    シェルスクリプトでPHPを実行したいのですが、うまくできません。 centos5でcrontabに 20 0 * * * /bin/sh /var/www/html/test/test.sh と登録しています。 cronのlogをみたところ Dec 12 00:20:01 localhost crond[19060]: (root) CMD (/bin/sh /var/www/html/test/test.sh) と記録されていてここまでは問題ないように思えます。 test.shの中身は #!/bin/sh cd /var/www/html/test/ php -f daily.php > result exit になっています。 daily.phpが実行されないので、daily.phpに何かおかしなところがあるのかと思い daily.phpを直接ブラウザから起動してみたところ問題なく処理されました。 このような経緯でtest.shの中身が間違っていると思っているのですがどこが間違っているのか分かりません。 どなたかアドバイス頂けると助かります。

  • crontabの自動実行について (Debian3.0)

    OSはDebian GNU/Linux 3.0です。 /etc/cron.daily の中にviで記述した下記のものを 保存しました。ファイル名back.sh #!/bin/sh rsync -acouv --stats /home/www /backup/back-all ;; しかし、自動実行できていませんでした。 www、back-all共に実在するディレクトリです。 crontabは下記のとおり、初期のままです。 SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 25 6 * * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.daily 47 6 * * 7 root test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly 52 6 1 * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly # 何か間違いがあるのでしょうか?

  • PHP の system コマンド

    ブラウザからtest.php を実行してperl スクリプトを実行したいのですが、 うまく動きません。アクセス権の問題なのでしょうか。 よろしくお願いします。 ---------------- test.php ---------------------- <? system("/usr/bin/perl /home/usr/public_html/test.pl > /dev/null &"); echo "OK."; ?> ---------------- End File ---------------------- ---------------- test.pl ----------------------- #!/usr/local/bin/perl $sendmail = '/usr/sbin/sendmail'; open(SENDMAIL,"| $sendmail -t -i"); print SENDMAIL <<'END'; From: hoge@hoge.com To: moga@moga.com Subject: test Hello This is test END close(SENDMAIL); --------------------- End File -------------------------

    • ベストアンサー
    • PHP
  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • シェルスクリプトで複数実行するには?

    web上からもアクセスできるphpに、定期的にアクセスするようにしたいと思っています。 定期的にアクセスするには、cronを利用すればできると思っていますが、phpへアクセスする方法が分からないために、別の記事にて質問させて頂いています。 (cronが利用できる、レンタルサーバを利用しております。) そこで、いろいろと調べていたところ、.shの拡張子のファイルを作成して、その中に命令事項を記入しておき、cronで.sh(シェルスクリプト?)を実行すれば良いみたいな事が記載されていました。 定期的自動にアクセスしたいphpファイルは複数あるので、phpファイルごとにcronを設定するより、このシェルスクリプトを利用して、複数のphpにアクセスできるようにできれば良いと思いました。 例えば「abc.sh」と言うファイルに、下記を記載してアップロード、パーミッションの設定。 #!/bin/sh/usr/bin/wget -q --spider http://xxx.yyy.com/abc/xxx.php そして、cronで実行日時を設定してこのファイルを実行すれば、「http://xxx.yyy.com/abc/xxx.php」へアクセスするような事が書かれていました。 複数のアドレスにアクセスさせたい場合は、.shのファイルにはどのように記述をすれば良いのでしょうか? またcron終了後にログメールが送信されてきますが、このログメールを送信しないようにするには、どのような記述をすれば良いのでしょうか? 一応調べてみたのですが、確認をお願いします。 abc.sh >/dev/null または abc.sh 2>&1 > /dev/null または abc.sh > /dev/null 2>&1 上記のような、複数の記述方法がありました。 どの記述方法がベターでしょうか。 質問をまとめますと、 複数のphpにアクセスする、シェルスクリプトの記述方法について。 cron終了後のログメールを送信しないようにするための、cronのコマンドの記述方法。 アドバイスを頂けると助かります。

  • PHPファイルをcronで定期的に実行したい

    centosでtest.phpを30分おきに動作させようと思います。 test.phpは /var/www/html/においてあります。 test.phpはコードの中で、require_once 'phpkit/kits.inc';と /var/www/html/phpkit/kits.incを呼び出しています。 [root]# find / -name php /root/src/senna-1.1.4/bindings/php /usr/share/swig/1.3.40/php /usr/share/php /usr/bin/php /usr/include/php /usr/lib64/php /var/lib/php [root]# /etc/rc.d/init.d/crond status crond (pid 1181) is running... [root]$ crontab -e 30 * * * * /usr/bin/php /var/www/html/test.php しかし、以上のように設定してもtest.phpは一度も実行されません。 phpのインストールは、ここの「PHPをソースからインストール」を利用しました。 http://www.akiyan.com/blog/archives/2008/09/tritonnmysqlsen.html /var/www/html/にinfo.phpを置いてアクセスしたところ、正常に情報が表示されます。 /var/www/html/にtest.phpを置いて、手動でアクセスしたところ、test.phpは正常に動作します。 ですので恐らくcrontabの設定が間違っているのだと思いますが、これ以上どうすればいいのかがわかりません。 cronでtest.phpを動作させるのに、この後どうすればいいのでしょうか。 どなたかご教示のほど、どうかよろしくお願いします。

  • PHPのexec()関数

    phpスクリプトで $command = "./child.php 2>&1"; exec($command, $outstr, $rtn); のような感じで別の phpスクリプトを実行しようとしています。 (child.php は単独では問題なく実行できています) しかし、child.php を 通常の phpファイルのように <?php で開始すると $rtn = 2 で line 1: ?php: No such file or directory というエラーが帰ってきます。 1行目にシェバング行 #!/usr/local/bin/php7.3 を追加すると $rtn = 126 で "/usr/local/bin/php7.3: bad interpreter" のようなエラーになります。 php のパスはサーバーのマニュアルやユーザーページで 確認する限り間違っていないと思います。 (バージョンを外したり、変えたりしてみましたが同じです) どこが間違っているのか、わかる方がいましたら アドバイスをお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう