
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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux cronでシェルスクリプト実行時のkubactlコマンドが機能しない対処法。 2 2022/08/03 18:58
- JavaScript 指定時間になったら、WEBサイトの更新を自動で行うには…? 3 2022/04/28 22:14
- サーバー 無料のレンタルサーバで、スクレイピング(?)はできますか? 2 2022/05/07 10:09
- その他(開発・運用・管理) bashで15分前と現在のエポックタイムの時間を取得したい 2 2023/02/01 19:10
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- UNIX・Linux メールアドレスにホスト名が入らないようにする設定 2 2022/06/23 21:06
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Windows 7 更新プログラムを入れたら操作出来なくなりました(泣) 1 2023/02/26 11:04
- Windows 10 このWindowsUpdateの失敗メッセージは何を物語るか? 5 2023/07/17 11:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlソースコードをコンパイル...
-
PERLからcshellを実行したいの...
-
テキスト検索にヒットした行の...
-
perlでコマンドプロンプト実行
-
これをビジュアルスタジオで実...
-
例外処理のフローチャートの記...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBSがコンパイルエラーになりま...
-
vba userFormのSubを標準モジュ...
-
混合言語のデバッグ(VC++6.0,V...
-
モジュールとクラスの違いって...
-
エクセルVBAでシートモジュール...
-
Excel VBA 定義されたプロージ...
-
モジュールからフォームのボタ...
-
erf(x)とerfc(x)のカタカナ読み...
-
requireの使い方がわかりません。
-
LCD ディスプレイを Raspberry ...
-
「デバイスは PRN を初期化でき...
-
ディスクの空き容量を求める(W...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlソースコードをコンパイル...
-
perlのsystem関数内でのコロン...
-
プロシージャの戻り値を取得す...
-
perl拡張子in linux
-
Perlで環境変数を設定するには
-
Mac OS.XでPerlプログラミング
-
自分以外のPerl.exeを強制終了...
-
Xサーバーのcronでcgiが自動更...
-
Catalyst+FastCGIの設定
-
systemの引数の中括弧
-
perlスクリプトをコマンドライ...
-
コードを一行ずつ実行したい。
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
「デバイスは PRN を初期化でき...
-
LCD ディスプレイを Raspberry ...
-
ユーザー定義関数に#NAME?が返...
-
vba userFormのSubを標準モジュ...
-
Excel VBA 定義されたプロージ...
おすすめ情報