はじめまして。Perlの質問です。
サーバAの/usr/sbin/vxquotaをサーバBで動いているWeb(perl/cgi)から
起動したいのですがpermission deniedのエラーがでて動きません。
サーバBからコマンドで、rsh サーバA /usr/sbin/vxquota -v ユーザID
とすれば動きます。
サーバBのCGIはprintf "I am %s.\n",(getpwuid($>))[0];で確認し、
rootで動いています。
このサーバBのPerlで、
system("/usr/local/apache/cgi-bin/DISK/vxquota.csh $user");
として
rsh サーバA /usr/sbin/vxquota -v $1(上のvxquota.cshの中身)
を実行しようとするとうまく動きません。
このようなことは、Perl(CGI)ではできないのでしょうか?
何かよい方法がありましたら、アドバイスをお願いいたします。

A 回答 (1件)

rootユーザーのホームディレクトリに.rhostsファイルがありますか?


書き方は、
リモートコマンドを許容するサーバ名を書きます。
+のみ書くと全てのマシンからリモートアクセスできます。

この回答への補足

回答ありがとうございます。
.rhostsは設定しています。サーバBのコマンドラインからrshを
叩いた時には、サーバAのvxquotaは問題なく動きます。
ただ、ブラウザ上から、ユーザIDを入力させて
perl/cgiのなかで、system~を動かすと
パーミッションエラーになってしまいます。
Apache(suEXEC)の設定が悪いのか、
そもそも、perlでrshまたはvxquotaが利用できないものなのか
プログラムの組み方が間違っているのかがいろいろ試してみましたが
わからないのです。

補足日時:2002/02/05 21:22
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qperlの1行目が#!/usr/bin/perlだと動かず#!/usr

perlの1行目が#!/usr/bin/perlだと動かず#!/usr/bin/perl5.8.9だと動くのですが、
#!/usr/bin/perlで動くようにするにはどうしたらいいのでしょうか?

インストールされているperlは
This is perl, v5.8.9 built for darwin-2level
です。

どこかでパスの設定をしてやればいいと思うのですが、
どこに何を書けばいいのかよくわかりません。

環境はMacOsX v10.6 SnowLeopardです。
どなたかよろしくお願いいたします。

Aベストアンサー

MacOSのことはよくわかりませんが、一般的なUNIX系OSで考えると、、

シンボリックリンク/usr/bin/perlを作り、/usr/bin/perl5.8.9にリンクすればいいでしょう。
ln -s /usr/bin/perl5.8.9 /usr/bin/perl

そうすればPerlスクリプトは「#!/usr/bin/perl」のままでOKです。

Q#!/usr/local/bin/perl

とPerlのCGIの先頭に書きますが
FedoraCore3でPerlを使うときにはどのように書けばよいのでしょうか?

Aベストアンサー

#!/usr/bin/perl

でしょうか。FedoraCore3は私は使っていませんが、cgiの先頭に書くのは、perlへのパスになるので、もしターミナルが使える状況なら

which perl

で得られるパスを #! につづけて書けばOKです。

Q#!/usr/local/bin/perlで命令が出せません。

プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。
どなたか、アドバイスをいただけないでしょうか?
ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl」というコマンドを入力すると、「/cygdrive/c/Perl/bin/perl」というのがでてきたので、「#!/cygdrive/c/Perl/bin/perl」というコマンドを書いても上手くいきませんでした。
ちなみに、私が書いたプログラムは、以下のようなものです。
#!/cygdrive/c/Perl/bin/perl (あるいは#!/usr/local/bin/perl)
# hello -- 挨拶のプログラム
print ("hello");

プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。
どなたか、アドバイスをいただけないでしょうか?
ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl...続きを読む

Aベストアンサー

perl.exe が、あなたの書いたスクリプトを見付けられないんじゃ無いでしょうか。

あなたの書いたスクリプトが hello.pl だとすると、

./hello.pl

とかで起動できないいんですね? 以下の Windows風の絶対パスでの起動を試してみてください。

'c:\foo\bar\hello.pl'


type perl の結果でスクリプトの 1行目 を決めるのは、大方は正しいでです。 正しくないのは、ふたつ以上のPerl処理系がインストールされた環境で使い分けるべき場合ですね。

type の結果が 「/cygdrive/c/Perl/bin/perl」というのは 「c:\Perl\bin\perl」であって、Cygwin の Perlでは無いのでしょう。それが Cygwin のShell(bash等) と相性の悪いのはしょうがない事です。

まずは、c:\Perl\bin\perl を使うのか Cygwin のPerl を使うのかを決めるのが良いと思います。 それにってその後にすべき事が変ってきます。

perl.exe が、あなたの書いたスクリプトを見付けられないんじゃ無いでしょうか。

あなたの書いたスクリプトが hello.pl だとすると、

./hello.pl

とかで起動できないいんですね? 以下の Windows風の絶対パスでの起動を試してみてください。

'c:\foo\bar\hello.pl'


type perl の結果でスクリプトの 1行目 を決めるのは、大方は正しいでです。 正しくないのは、ふたつ以上のPerl処理系がインストールされた環境で使い分けるべき場合ですね。

type の結果が 「/cygdrive/c/Perl/bin/perl」とい...続きを読む

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Q#!/usr/bin/perl --でも不安定です

#!/usr/bin/perl
ですと全く表示されず、Internal Server Error.
#!/usr/bin/perl --
でも30%ぐらいしか画面表示されません。
サーバのファイルをTeraTermで見てもおかしなファイルが見当たりません。
問題のファイルを調べる方法はありますでしょうか?
Carpモジュールをuseしても相変わらずInternal ServerError.でさっぱり見当がつきません。

Aベストアンサー

(1)perlの確認
telnetで
 where perl
とやって、perlの場所を確認。

(2)プログラムの確認
  perl -c test.cgi
等として、エラーが無いか確認。

(3)出力の確認
  perl test.cgi
として、ちゃんと意図した物が出力されるか確認。

(4)出力内容の確認
良くあるのはCGI呼び出しなのに、先頭の
 content-type:text/html\n\n
が無いなどをチェック。

そもそもCGIなのか、実行するだけなのか判りませんが、
CGIで、プログラムがOKで、それでもだめな事を確認してから

apacheあたりの設定を疑うのが良いかと思います。
その場合、

!/usr/bin/perl
print "Content-type: text/html\n\n\n";
print "<html><body>test</body></html>\n";
exit;

ぐらいのプログラムでお試しを。


おすすめ情報