shell 上ではうまく動くスクリプトなのに、Web 上ではうまく動かないのですが?

[上に] [前に] [次に]
IMO [E-Mail] 1998/04/08(水) 14:21:54
 今、掲示板を設置しようとしています。それで、そのスクリプトが、
shell 上で走らせると、エラーは出ないのですが、Web から走らせると、
メッセージを書き込んで送信したときに、

500 Internal Server Error

と表示されてしまいます。しかも、そのページを再読み込みすると、
今書いたメッセージが表示されるんです。一体なんででしょう?
エラーを出さないためにはどうすればよいのですか?

 ちなみに、私のプロバイダーのサーバは、NCSAで、
ヘッダのあとには、一行改行もあるし、\n\n も最後に付けています。
 また、サーバに .htaccess ファイルに以下のことを書き込めといわれたので、
書き込みもしたのですが、、、

Options Includes ExecCGI
AddType application/x-httpd-cgi cgi
<Limit PUT GET POST>
order deny,allow
allow from all
</Limit>

 その時に、設置ディレクトリはスクリプトに依存するといわれたので、
もしかしたら、それがカギなのかもしれません。

 どうか、教えて下さい。

B-Cus 1998/04/08(水) 17:21:52
ひとつひとつ解決していきましょう。

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print "test ok.\n";

このCGIを実行させられますか? ダメならパーミッションを
見直してください。

BBSがどうこうというのは、これが動いてからの話です。

IMO [E-Mail] 1998/04/08(水) 23:11:34
 B-Cus さんの書いていたスクリプトは問題なく動きました。
(ブラウザに test ok. って出ればいいんですよね)

 それで、今FTPしたときにちょっと気になったのですが、私のプロバイダは
ファイルが来ると、勝手にパーミッションを644にしてしまうみたいなんです。
だから、掲示板のログファイルを書き換えるときに、パーミッションが644に戻って
しまうからなような気もします。

 もしそうならば、どうやればこの設定を変えられるか、教えて下さい。


B-Cus 1998/04/09(木) 04:08:46
ということはCGIの実行はできているということで、.htaccessは
関係ないわけですね。

> ファイルが来ると、勝手にパーミッションを644にしてしまうみたいなんです。
> だから、掲示板のログファイルを書き換えるときに、パーミッションが644に戻って
> しまうからなような気もします。

それはないと思うけど…。

最初はログファイルは777にしたのだけれど、CGIを実行すると
644になる、とおっしゃりたいわけでしょうか。

nobody権限で実行した場合、ファイルのオーナーのからみで
パーミッションを変更することはできないと思います。

所有者の権限で実行した場合は、ファイルを一度消して
再び書き込んむのなら644になってしまうかもしれませんが、
それはそれで問題ないわけです。だって所有者の権限で
read,writeできるんだから。

コマンドラインから実行できるのにCGIで実行できない
となれば、まずはPATHでしょう。スクリプト中で
system("foo")とか`bar`('…'じゃなくて`…`ね)とか
open(OUT,"|hogehoge")とか書いてあるところはありませんか?
そのコマンドをフルパスで書いてみましょう。
例えばopen(OUT,"|sendmail")をopen(OUT,"|/usr/sbin/sendmail")
とか。

あとはパーミッションですかね。nobody権限で動かす場合、
ディレクトリやファイルは777などになっていますか?
もちろんCGIが読み書きする全てのファイルについて、です。

ところで、どこのどんなCGIを設置しようとしているんですか?

IMO 1998/04/09(木) 14:08:02
 まず、PATH のことですが、関数(?)($ のついたもの)で、
一応全部書かれてありました。でも、ものによっては、
相対パスだったり、絶対パスだったりしていたので、統一したほうがよいのでしょうか?
(もし統一するならば、どちらの方が、よいのでしょうか?)

 それと、パーミッションのことなんですが、やっぱり一度書き込んだら、
ログファイルが644に戻っていました。しかも、所有者が私ではなく、www で。
 もともと、パーミッションが666ということは、誰でも、そのファイルを
書き換えられるってことですよね。だから、外部からブラウザを通してアクセスしてきた人も
その人の名義(この場合は www)で新たにファイルを作ってしまい、
その時にパーミッションもデフォルトの644に戻ってしまうからのように思われます。
素人の考えなので、当たっているかどうかは分かりませんが。
 でも、仮にそうならば、どうしたらよいでしょうか?(大きな声じゃいえないのですが、
ウチのプロバイダーは、基本的にCGIやシェルの質問を受け付けてくれないようですので)

 あ、設置しようとしている掲示板は、浜ちゃん(すいません、URLは忘れてしまいましたが、
Yahoo で検索できました)の「掲示板v5」というものです。


B-Cus 1998/04/09(木) 15:16:37
> まず、PATH のことですが、関数(?)($ のついたもの)で、
> 一応全部書かれてありました。

$sendmail = "/usr/sbin/sendmail";
のような書き方ってことですね。すべてこういう書き方に
なっているなら、パスは問題ないでしょう。
相対パス、絶対パスは統一する必要はないと思います。

> それと、パーミッションのことなんですが、やっぱり一度書き込
> んだら、 ログファイルが644に戻っていました。しかも、
> 所有者が私ではなく、www で。

なるほど。おそらく777のディレクトリの下にあるファイルを
一度消してからまた作っているのだと思います。とはいえ、
パーミッションは問題ないのかもしれません。だって所有者が
wwwでパーミッションが644ならwww君はread,writeできるんですから。
とはいえ、書き込み時にエラーになってその後はうまくいくのなら、
やっぱりパーミッションの問題のような気もします。

どういうBBSなのか知らないし(このラウンジ風なのか
それとも一つの書き込みでファイルを一つ作るのかなど)、
スクリプトも手元にないの、これ以上はなんとも言えません。
# 配布元のURL教えてくれたら何か言えるかもね;-)

> ウチのプロバイダーは、基本的にCGIやシェルの質問を受け付けて> くれないようですので

そんなもんです。僕がプロバイダのサポートだったとしても、
CGIのサポートは絶対やりたくないですから(笑)

IMO 1998/04/09(木) 16:02:29
[[解決]]
 不思議なもので、友達などにも頼んで試してもらった結果、
うまくいくようになりました。いまだにどこかが悪くてダメだったのか、分かりませんが、
なんとか無事につながっております。

 またトラブルが起きたら、このラウンジに質問を出すかもしれませんが、
当面は動くように思われます。

 どうもありがとうございました。

[上に] [前に] [次に]