
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のプログラムを自動的に動かす方法があったら教えて下さい。宜しくお願いします。
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ファイルに許可・拒否するユーザを登録して制御する)使えません。
この回答への補足
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の基礎が分かってない私にとってチンプンカンプンなのですがやはりコマンドとかを学んだほうがいいようですね。
saijyo_739さん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。
hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。
カレントディレクトリの設定に相違があったようです。
ご心配おかけしました。ありがとうございます。
No.2
- 回答日時:
テーブルの更新と共に、デーモンの更新をするコマンドを実行しないと。
その前に、それはrootかCGI実行者で行う必要がある。まずコマンドで手動で行ってみてから、CGIでやろうね。
(crontabテーブルはrootでないと更新できなかったけ?)
>ps. cron以外でもperlのプログラム
http://www.google.co.jp/search?hl=ja&q=Linux+%E8 …
この質問者にもいえるが、シェルとかコマンドとか学びましょう。
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使うのが一番手っ取り早いですけど。
この回答への補足
noranukoさんご回答ありがとうございます。
早速noranukoさんのご指摘通りすべて試みたのですがプログラムの更新はされません。
指定時間にCron結果の通知メールはちゃんと来るのですが、、、、
cron以外の方法もご教示していただきありがとうございます。なんとかcronでやり遂げたいのですが、どうしても出来ない場合その2つの方法も試みてみます。
noranukoさん問題解決いたしました。いろいろとご教示ありがとうございました。勉強になりました。
hello.cgiの中でファイル出力場所を相対パスにしていたのですが、そこを絶対パスに変更すると無事自動更新出来るようになりました。
カレントディレクトリの設定に相違があったようです。
ご心配おかけしました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
openした後、closeしないでプロ...
-
Perlのエラーについてご教授く...
-
テキストファイルで提出とは?
-
perlで複数のファイルの処理に...
-
Perlで同じフォルダにある任意...
-
perlのプログラミング 部分入れ...
-
perl 正規表現でエラー
-
arduino の割り込み処理について
-
perlで読める文字にデコード?...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルに書き込めな...
-
Perlソースコードをコンパイル...
-
UNIX SUN Solarisで時間の演算
-
プロシージャの戻り値を取得す...
-
なぜか実行されません
-
PerlとPHPのサーバーへの負担に...
-
インストールについて(初心者...
-
perlスクリプトをコマンドライ...
-
Perlで環境変数を設定するには
-
Perlを始めたんですが
-
perl/tkを使って作ったGUIを実...
-
Perlでのファイル処理について...
-
以下のperlのプログラムについ...
-
Perlのexitについて
-
プログラミング初心者です。
-
perl2exeでuse encodingが使えない
-
並列処理、fork、threadについて
-
system関数を使用してJava実行...
-
systemの引数の中括弧
-
perlからcを呼び出す
おすすめ情報