• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Xサーバーのcronでcgiが自動更新されません。)

Xサーバーのcronでcgiが自動更新されない理由と解決方法

このQ&Aのポイント
  • Xサーバーのcronで指定したプログラムが自動更新されずに困っています。Perl初心者のため、マニュアルやモジュールの記述方法が分からないです。他の方法でも自動実行できる手段があれば教えてください。
  • Xサーバーのcronで指定したプログラムが正常に実行されない問題に悩んでいます。Perlの初心者なので、記述方法や必要なモジュールが分からないです。他の方法でも自動実行できる手段があれば教えてください。
  • Xサーバーのcron設定で指定したプログラムが自動更新されない問題に直面しています。Perlの初心者で、どのような記述が必要なのか分かりません。もしくは他の方法で自動実行できる手段があるのでしょうか。

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

  • ベストアンサー
回答No.3

質問内容を誤解した回答がされていますが。 ※質問者の表現も良くないかも。 サーバスペースをレンタルされている業者『Xサーバー』で設定ページが用意されているcorn機能を使ってますって事ですよね。 ※ unix/linuxのcronかどうかは不明 なので、cron使っているとしても設定ページで行なった自動実行の設定は有効に機能するよう提供されているかと思います。 『自動更新の時間になったら「Cron結果の通知アドレス」で設定したメールは届く』という事からもcronへの登録自体は問題なく行なわれており、cronは登録されているプログラムを実行しようと試みていると思われます。 登録時刻に送信され届いたメールに何が起こっているか書かれているかと思いますので、その内容やそれに対する対処法がわからない場合にはそこに書かれている内容を示した方が良さそうに思います。 > hello.cgiというプログラムを実行しようとしているので cronからではなくそのプログラムを手動で実行した時の動作は確認されているのでしょうか。 ※ perl hello.cgiとして実行するのではなく、/home/●●●/▲▲▲/public_html/hello.cgiで手動実行してご確認ください。(動かない場合には実行が許可されてない[chmod +x .../hello.cgiで許可するなど]事やプログラム作成に問題があるなどが考えられます) ※ crontabコマンドは基本的にどのユーザでも使えますよ。ただし、普通は不要なユーザには開放してないので(cron/allowやcron/denyファイルに許可・拒否するユーザを登録して制御する)使えません。

perlgogo
質問者

お礼

saijyo_739さん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。 hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。 カレントディレクトリの設定に相違があったようです。 ご心配おかけしました。ありがとうございます。

perlgogo
質問者

補足

saijyo_739さんご回答ありがとうございます。 >サーバスペースをレンタルされている業者『Xサーバー』で設定ページが用意されているcorn機能を使ってますって事ですよね。 その通りです。『Xサーバー』でのcorn機能です。 >登録時刻に送信され届いたメールに何が起こっているか書かれているかと思いますの>で、その内容やそれに対する対処法がわからない場合にはそこに書かれている内容を>示した方が良さそうに思います。 送信され届いたメールに書かれていいる内容は以下です。 /home/●●●/▲▲▲/public_html hello.cgi 今見れば、なぜかpublic_htmlとhello.cgiの間に『/』がないのが気になります。XサーバーのCron設定ではちゃんと /home/●●●/▲▲▲/public_html/hello.cgi と『/』は記入しています。届いたメールでは『/』部分が改行されてます。 >cronからではなくそのプログラムを手動で実行した時の動作は確認されているのでしょうか。。 はいwebブラウザでhello.cgiがあるurlを再読み込みするとちゃんと実行されます。 (hello.cgiが実行されれば open(OUT,"> index.html"); により独自ドメインの トップページのURLにhello.cgiの結果が表示するようにしています。その際現在時刻を取得するようにしていますがwebブラウザでhello.cgiのurlを再読み込みをするとちゃんと現在時刻と取得してますので手動では実行されているようです。) >※ perl hello.cgiとして実行するのではなく、/ho........................ >※ crontabコマンドは基本的にどのユーザでも使えますよ。ただし、普通................ アドバスありがとうございます。saijyo_739さんの上記の※2点についてまだperlの基礎が分かってない私にとってチンプンカンプンなのですがやはりコマンドとかを学んだほうがいいようですね。

その他の回答 (2)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

http://www.google.co.jp/search?hl=ja&q=Linux+cron%E8%A8%AD%E5%AE%9A%E3%81%AE%E4%BB%95%E6%96%B9&lr=lang_ja テーブルの更新と共に、デーモンの更新をするコマンドを実行しないと。 その前に、それはrootかCGI実行者で行う必要がある。まずコマンドで手動で行ってみてから、CGIでやろうね。 (crontabテーブルはrootでないと更新できなかったけ?) >ps. cron以外でもperlのプログラム http://www.google.co.jp/search?hl=ja&q=Linux+%E8%87%AA%E5%8B%95%E5%AE%9F%E8%A1%8C%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89&lr=lang_ja この質問者にもいえるが、シェルとかコマンドとか学びましょう。

perlgogo
質問者

補足

0909unionさんご回答ありがとうございます。 上記のリンク先でシェルとかコマンドついて学んでみます。

  • noranuko
  • ベストアンサー率46% (620/1332)
回答No.1

cgiの1行目に #!/usr/bin/perl を記載し、パーミッションに実行権限を付けていますか? (パーミッション設定が777とか、755とかになってますか?) こうしないと、実行出来るコマンドとしてスクリプトは認識されません。 上記がよくわからない場合、cronの記載を以下のように変えれば おそらく動くと思います。 /user/bin/perl /home/●●●/▲▲▲/public_html/hello.cgi >ps. cron以外でもperlのプログラムを自動的に動かす方法があったら教えて下さい。宜しくお願いします。 1.常駐するスクリプトにして、定期的に実行する  ・スクリプトを無限ループにする  ・ループの中では   ・例えば1分sleepする   ・時刻をチェックする    -設定した時刻なら取得スクリプトを実行 2.cgiファイルのようなので、外部からhttpでcgiを叩けるようにし、  外部のプログラムで定期処理する ま、Cron使うのが一番手っ取り早いですけど。

perlgogo
質問者

お礼

noranukoさん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。 hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。 カレントディレクトリの設定に相違があったようです。 ご心配おかけしました。ありがとうございます。

perlgogo
質問者

補足

noranukoさんご回答ありがとうございます。 早速noranukoさんのご指摘通りすべて試みたのですがプログラムの更新はされません。 指定時間にCron結果の通知メールはちゃんと来るのですが、、、、 cron以外の方法もご教示していただきありがとうございます。なんとかcronでやり遂げたいのですが、どうしても出来ない場合その2つの方法も試みてみます。

関連するQ&A