プロが教えるわが家の防犯対策術!

perl初心者です。RSSを取得してタイトルや内容をhtmlに吐き出すというプログラムを作成しています。Xサーバーで指定時間に指定コマンド(プログラム)を自動的に実行させるサーバーの機能(cron)といものがあったのでマニュアル 
http://www.xserver.ne.jp/man_program_cron.php
を見て自動更新しようと試みているのですがプログラムが実行されません。

hello.cgiというプログラムを実行しようとしているので
マニュアルにある絶対パスの記入例の通り
/home/●●●/▲▲▲/public_html/hello.cgi
とXサーバーのCron設定で記入しています。自動更新の時間になったら「Cron結果の通知アドレス」で設定したメールは届くのですがプログラムは実行されてません。

cronの機能を使う際perlのほうで(ここではhello.cgi)何か記述する必要があるのでしょうか?もしくは何かモジュールとか必要なのでしょうか?

ps. cron以外でもperlのプログラムを自動的に動かす方法があったら教えて下さい。宜しくお願いします。

A 回答 (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ファイルに許可・拒否するユーザを登録して制御する)使えません。

この回答への補足

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の基礎が分かってない私にとってチンプンカンプンなのですがやはりコマンドとかを学んだほうがいいようですね。

補足日時:2011/03/29 15:48
    • good
    • 0
この回答へのお礼

saijyo_739さん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。

hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。
カレントディレクトリの設定に相違があったようです。

ご心配おかけしました。ありがとうございます。

お礼日時:2011/03/30 15:56

http://www.google.co.jp/search?hl=ja&q=Linux+cro …

テーブルの更新と共に、デーモンの更新をするコマンドを実行しないと。

その前に、それはrootかCGI実行者で行う必要がある。まずコマンドで手動で行ってみてから、CGIでやろうね。
(crontabテーブルはrootでないと更新できなかったけ?)


>ps. cron以外でもperlのプログラム

http://www.google.co.jp/search?hl=ja&q=Linux+%E8 …

この質問者にもいえるが、シェルとかコマンドとか学びましょう。

この回答への補足

0909unionさんご回答ありがとうございます。

上記のリンク先でシェルとかコマンドついて学んでみます。

補足日時:2011/03/29 11:59
    • good
    • 0

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使うのが一番手っ取り早いですけど。

この回答への補足

noranukoさんご回答ありがとうございます。
早速noranukoさんのご指摘通りすべて試みたのですがプログラムの更新はされません。
指定時間にCron結果の通知メールはちゃんと来るのですが、、、、


cron以外の方法もご教示していただきありがとうございます。なんとかcronでやり遂げたいのですが、どうしても出来ない場合その2つの方法も試みてみます。

補足日時:2011/03/29 11:49
    • good
    • 0
この回答へのお礼

noranukoさん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。

hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。
カレントディレクトリの設定に相違があったようです。

ご心配おかけしました。ありがとうございます。

お礼日時:2011/03/30 15:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!