- ベストアンサー
さくらレンタルサーバーでシェルが実行されない
さくらレンタルサーバーのスタンダードを借り、 cakephpのWebアプリケーションを勉強している者です。 cronに #!/bin/sh curl http://(ユーザ名).sakura.ne.jp/xxx/hogehoge のようなシェルを設定したのですが、 curl: not found と出力され実行できません。 telnetからは実行されたのでパスは問題ないと思います。 さくらサーバーではcurlは実行できないのでしょうか? また、どうすれば上記のようなシェルは実行できるのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>curlはフルパスではありません。 でしたらフルパス指定にして様子を見る。 とされてはいかがでしょう。 フルパスで書かないとcronでなぜ失敗するのか、telnet(シェルからの実行)ではなぜ問題ないのか… については#3で回答されていますが…。 cronで実行されるシェルスクリプト中で環境変数をファイルに書き出してみるとPATHが未設定になっていることが判るかと。 # printenv > /tmp/env とか。 crontab -e でcronの設定を行っているのであれば、一緒に環境変数なんかも設定できるかも知れませんが。 "crontab PATH"で検索してください。 # man 5 crontab でも見られるでしょうけど。
その他の回答 (3)
- satomi3951
- ベストアンサー率71% (98/137)
単にパスが通ってないだけだと思います。 シェルだと、~/.profileあたりでPATHを設定していますよね? cronは.profileを読んではくれないので、crontab内でPATHを指定(man crontab)するなり、 フルパスでコマンドを実行するなりする必要があります。 不便だとか、不親切だとか思うかもしれませんが、 そもそもシェルと言っても、sh,csh,ksh,bash,etc.etc.と色々あり、 シェルによって環境変数の設定方法も違うのですから、 いちいちcronがそれぞれに対応するのも変な話でしょ?
お礼
御礼が遅くなってしまい大変失礼いたしました。 /usr/local/bin/curl http://(ユーザ名).sakura.ne.jp/xxx/hogehoge とすることで対応できました。 PATH指定のファイルなど知らないことが多かったので勉強になりました。 ありがとうございます。
- Wr5
- ベストアンサー率53% (2173/4061)
>cronにはフルパスで記述しており、 ということは、 >curl http://(ユーザ名).sakura.ne.jp/xxx/hogehoge の"curl"もフルパスで記述されているのですよね? であれば、 >curl: not found という出力はないかと思われますが… そうなると原因不明ですかね……
補足
curlはフルパスではありません。 telnetからだとcurlのみで実行され、 想定通りの処理をしてくれます・・・
- Wr5
- ベストアンサー率53% (2173/4061)
>telnetからは実行されたのでパスは問題ないと思います。 では、cronからはパスは通っているのでしょうか? ということで、フルパスで記述してはどうですか? # あとは…そのシェルの実行ユーザも気にする必要があるかも知れませんけど。
補足
回答ありがとうございます。 >では、cronからはパスは通っているのでしょうか? >ということで、フルパスで記述してはどうですか? 説明不足で申し訳ございません。 cronにはフルパスで記述しており、 sh cronに記述しているパス のコマンドでtelnetで実行できたので、問題ないようだと思いました。 ># あとは…そのシェルの実行ユーザも気にする必要があるかも知れませんけど。 パーミッションは755と設定しており、すべてのユーザで実行できるように設定しております。 また文字コードはUTF-8、改行は\nと設定し、 転送モードはアスキーに設定してアップロードしました。
お礼
わざわざ補足説明までしてくださってありがとうございます。 正常に動作することを確認することが出来ました。 また、3回も回答してくださってありがとうございます。 わからないことだらけで、 Wr5さんの補足説明がが無かったら解決できませんでした、 本当に助かりました。