共用サーバ(heteml)が手狭になり、初めて専用サーバを借りました(さくらのエントリープラン)。

http://server.sakura.ad.jp/dedicated/entry/index.html
CentOS5で、標準構成のまま使っています。

しかし、引越し前のサーバで動いていたcgiが新しい専用サーバでは動きません。
何か必要な設定があるのでしょうか?

すべてのcgiが動かないわけではなく、テスト用に作ったカンタンなものは問題なく動きます。

また、下記に掲載されているcgi利用許可の手順については既に対応済です。
http://vine-linux.ddo.jp/linux/apache/cgi.php
全てのディレクトリで動くようにしています。更新後のapache再起動も済です。

他に必要な手順があればご教示ください。よろしくおねがいします。

回答の条件
  • 1人2回まで
  • 登録:2008/12/25 16:52:33
  • 終了:2009/01/01 16:55:03

回答(3件)

id:goodvn No.1

goodvn回答回数228ベストアンサー獲得回数182008/12/25 16:57:00

ポイント27pt

エラーログなどは出ていませんか?

エラーログにしたがって,足りないライブラリなどをインストールしないといけないと思います

CGI が Perl なら,足りない Perl module がいくつかあると推測されます

id:freewriter

なるほど、確かにそうですね。ありがとうございます!

よろしければエラーログの見方を教えて頂けませんでしょうか。。

検索していますが関連記事が見つけられません。

2008/12/25 17:27:06
id:tomopo No.2

matsuoki回答回数15ベストアンサー獲得回数32008/12/25 19:23:40

ポイント27pt

そののサーバにssh等で接続が可能でしたら、シェルで

> locate httpd.conf

でApacheの設定ファイルの場所が、

> grep ErrorLog /path/to/httpd.conf

で、エラーログの出力先がわかると思います。

(たぶん/var/log/ か /var/log/httpd/ あたりに有ると思います。)

そちらを見れば、エラーの内容が表示されるかもしれません。


もう一つ、実際にCGIをコマンドラインで動かすと、エラーがわかる場合が多いです。

たとえば、動かしたいCGIが /www/bbs/bbs.cgi だと、sshで

> ./bbs.cgi

> perl ./bbs.cgi

などを行うと、本来ブラウザが表示するhtml文が標準出力に表示されます。

その際、エラーが有る場合はエラーの内容と行が表示されます。


perlのモジュールが足りない場合、root権限でcpanというコマンドでインストールが出来ます。

id:freewriter

アドバイスを元に調べたら、エラーログが見れました!ありがとうございます。

内容は下記のとおりです。jcode.pmが無いのが問題なんでしょうか。

[Thu Dec 25 20:42:23 2008] [error] [client 58.1.233.89] Can't locate Jcode.pm in @INC (@INC contains: ./lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /var/www/html/index.cgi line 24.

[Thu Dec 25 20:42:23 2008] [error] [client 58.1.233.89] BEGIN failed--compilation aborted at /var/www/html/index.cgi line 24.

[Thu Dec 25 20:42:23 2008] [error] [client 58.1.233.89] Premature end of script headers: index.cgi

[Thu Dec 25 20:42:27 2008] [error] [client 58.1.233.89] Can't locate Jcode.pm in @INC (@INC contains: ./lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /var/www/html/index.cgi line 24.

[Thu Dec 25 20:42:27 2008] [error] [client 58.1.233.89] BEGIN failed--compilation aborted at /var/www/html/index.cgi line 24.

[Thu Dec 25 20:42:27 2008] [error] [client 58.1.233.89] Premature end of script headers: index.cgi

[Thu Dec 25 21:34:26 2008] [error] [client 12.163.239.198] Can't locate Jcode.pm in @INC (@INC contains: ./lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /var/www/html/index.cgi line 24.

[Thu Dec 25 21:34:26 2008] [error] [client 12.163.239.198] BEGIN failed--compilation aborted at /var/www/html/index.cgi line 24.

[Thu Dec 25 21:34:26 2008] [error] [client 12.163.239.198] Premature end of script headers: index.cgi

2008/12/25 23:37:27
id:tomopo No.3

matsuoki回答回数15ベストアンサー獲得回数32008/12/26 00:31:40

ポイント26pt

ですね、Jcode.pmが無いのが原因のようです。

CPANが入っていれば、root権限で

# cpan install Jcode

でインストール出来ると思います。

もしくは、ちょっと自信は無いですが、jcode.pm(と、関連ファイルが有ればそれら一式)をcgiと同じディレクトリに入れても良いかもしれません。

まぁ好きな物を好きなだけ入れられるのが専用サーバの醍醐味なんで、cpanで入れてしまうのがおすすめです。

id:freewriter

cpanでインストールしてみました。無事動いております。

CUIに苦手意識がありましたが、問題解決できて感激です。

これからも頑張って勉強していきたいと思います。

皆様、大変ありがとうございました!

2008/12/26 00:43:04
  • id:munyaX
    とりあえずどう動かないのかお願いします。
    エラーが出るようならエラーメッセージを。もしソースコードを公開できるようなら見せていただけると手がかりがつかめるかもしれません。

    Apacheのエラーログ(error_log)に記録されていればその内容もお願いします。
  • id:standard_one
    引越し前のphpinfoの内容は記録してありますか?
  • id:freewriter
    皆様ありがとうございます。

    真っ白な画面で動かず、特にエラーメッセージは表示されません。ソースコードは公開できません(長いし)。すいません。Apacheのエラーログはどこから見ればよいですか?
    あと、引越し前のphpinfoは記録してあります。長いですがどこの情報が必要でしょうか?
  • id:goodvn
    error_log は httpd.conf の中で設定するので,どこに出力されているか分からないのですが,FreeBSD だと,/var/log/httpd-error_log といったパスが使われています

    たぶん似たようなところにあると思います

    >||
    % locate error_log
    ||<

    で出てくるかもしれません
  • id:freewriter
    httpd.confから抜粋しました。これのことでしょうか?<エラーログの場所

    # ErrorLog: The location of the error log file.
    # If you do not specify an ErrorLog directive within a <VirtualHost>
    # container, error messages relating to that virtual host will be
    # logged here. If you *do* define an error logfile for a <VirtualHost>
    # container, that host's errors will be logged there and not here.
    #
    ErrorLog logs/error_log

    あと、% locate error_logはどういう意味ですか?
  • id:goodvn
    % はシェルコマンドを,root ではない権限で実行する,という表現です
    root の場合は,# と書きます
    locate コマンドは,ファイルを検索するコマンドです

    >||
    % man locate
    ||<

    ↑locate コマンドのマニュアルを表示するコマンド
  • id:munyaX
    ソースが分からないとなるとエラーログを拝見するしか手がないですねぇ。
    設定ファイルの近くに「logs」というディレクトリがありませんか?
    その中に入っているはずです。

    もし見つからないようならrootでログインし、以下のコマンドを実行
    してみてください。

      find / -name error_log

    これでファイルのパス(ファイルの置き場所)が判明します。
    これを何らかの方法で開いてみるか、

      grep [CGIのファイル名] error_log

    などとしてファイル内を検索してみてください。
    例: grep "hoge.cgi" error_log

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません