linuxコマンドラインだと実行できるコマンドを、apache2.2のCGI(perl)上で実行しても出力が返ってきません。


正しく実行する方法、もしくは実行できない原因として考えられる事を教えてください。
ちなみに、コマンドラインでの実行ユーザとapacheの実行ユーザは合わせてあります。



実行したいコマンド:/usr/local/bin/kingtr -e 'this is a pen'
コマンドから得られる出力:これはペンです。



*実行したperlスクリプト
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `whoami`;
print `/usr/local/bin/kingtr -e 'this is a pen'`;




*コマンドラインからスクリプトを実行したときの出力
Content-type: text/html

myuser
これはペンです。






*CGIから実行したときの出力

myuser

回答の条件
  • 1人5回まで
  • 登録:2007/11/18 00:18:49
  • 終了:2007/11/25 00:20:03

回答(5件)

id:iwaim No.1

iwaim回答回数215ベストアンサー獲得回数192007/11/18 01:12:10

ポイント20pt

system()関数で実行すれば大丈夫でしょう。

id:syuszk

ご回答ありがとうございます。

system("/usr/local/bin/kingtr -e 'this is a pen'");

に変更したところ、256(システムコールエラーの返り値?)が出力されるようになりました。

ちなみに、ディストリビューションはUbuntu7.10で、SELinuxはインストールしていません。

2007/11/18 23:34:54
id:hamster078 No.2

hamster078回答回数587ベストアンサー獲得回数42007/11/18 03:52:58

ポイント20pt

/usr/local/binにPATHが通ってないのでは?あるいは文字コード。

id:syuszk

ご回答ありがとうございます。

絶対パスで指定しているので、PATHは関係ないと思います。

コマンド内に日本語が含まれないので、文字コードも関係ないと思います。

2007/11/18 23:35:02
id:Bookmarker No.3

しおり回答回数191ベストアンサー獲得回数342007/11/18 09:33:24

ポイント20pt

「Content-type: text/html」なのに、プレーンテキストを返しているから表示されないのだと思います。

「Content-type: text/plain」に変えれば表示されると思います。

id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402007/11/18 14:48:40

ポイント20pt

ユーザーも同じ、スクリプトも同じであるならば、後は環境変数ぐらいでしょうか。

Apache からの実行の場合ログイン処理を行わないので同じユーザーであっても環境が異なります。


Perl スクリプト中で、以下を実行してみて両環境で比較してみてください。

print `env` , "\n";

あとは kingtr がどういうプログラムなのかがわからないので、なんとも言いにくいです。

id:syuszk

ご回答ありがとうございます。

kingtrはオプション-eで指定した文章を日本語に翻訳するプログラムです。

ちなみにnobodyで実行しようとすると、

Cannot make directory /nonexistent/.king.

というエラーが出ます。



みなさんから頂いたご回答を元に、スクリプトを次のように改良してみました。

*改良したスクリプト

#!/usr/bin/perl

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

print `whoami`;

print `env`;

print system("/usr/local/bin/kingtr -e 'this is a pen.'");

*コマンドラインから実行したときの出力

Content-type: text/plain

myuser

SSH_AGENT_PID=6732

SHELL=/bin/bash

DESKTOP_STARTUP_ID=

TERM=xterm

XDG_SESSION_COOKIE=0b0b56ee5e509240dce4a90047143300-1195273524.308425-1852336690

GTK_RC_FILES=/etc/gtk/gtkrc:/home/akoshu/.gtkrc-1.2-gnome2

WINDOWID=58720350

USER=myuser

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35:*.ogg=01;35:*.wav=01;35:

SSH_AUTH_SOCK=/tmp/ssh-yIBCqQ6692/agent.6692

GNOME_KEYRING_SOCKET=/tmp/keyring-Cehh6i/socket

SESSION_MANAGER=local/ubuntu-vm:/tmp/.ICE-unix/6692

USERNAME=myuser

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

DESKTOP_SESSION=default

QT_IM_MODULE=xim

GDM_XSERVER_LOCATION=local

PWD=/home/myuser

XMODIFIERS=@im=SCIM

LANG=ja_JP.UTF-8

GNOME_KEYRING_PID=6689

GDM_LANG=ja_JP.UTF-8

GDMSESSION=default

HISTCONTROL=ignoreboth

SHLVL=1

HOME=/home/myuser

GNOME_DESKTOP_SESSION_ID=Default

LOGNAME=myuser

XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-nb3OoCGyVH,guid=561329229729c3901285b100473e6d3a

LESSOPEN=| /usr/bin/lesspipe %s

WINDOWPATH=7

DISPLAY=:0.0

GTK_IM_MODULE=scim-bridge

LESSCLOSE=/usr/bin/lesspipe %s %s

COLORTERM=gnome-terminal

XAUTHORITY=/home/akoshu/.Xauthority

_=/usr/lib/cgi-bin/pen.pl

これはペンです

*CGIから実行した時の出力

myuser

HTTP_HOST=127.0.0.1

HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.8) Gecko/20071022 Ubuntu/7.10 (gutsy) Firefox/2.0.0.8

HTTP_ACCEPT=text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

HTTP_ACCEPT_LANGUAGE=ja,en-us;q=0.7,en;q=0.3

HTTP_ACCEPT_ENCODING=gzip,deflate

HTTP_ACCEPT_CHARSET=Shift_JIS,utf-8;q=0.7,*;q=0.7

HTTP_KEEP_ALIVE=300

HTTP_CONNECTION=keep-alive

PATH=/usr/local/bin:/usr/bin:/bin

SERVER_SIGNATURE=<address>Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6 Server at 127.0.0.1 Port 80</address>

SERVER_SOFTWARE=Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6

SERVER_NAME=127.0.0.1

SERVER_ADDR=127.0.0.1

SERVER_PORT=80

REMOTE_ADDR=127.0.0.1

DOCUMENT_ROOT=/var/www/

SERVER_ADMIN=webmaster@localhost

SCRIPT_FILENAME=/usr/lib/cgi-bin/pen.pl

REMOTE_PORT=42699

GATEWAY_INTERFACE=CGI/1.1

SERVER_PROTOCOL=HTTP/1.1

REQUEST_METHOD=GET

QUERY_STRING=

REQUEST_URI=/cgi-bin/pen.pl

SCRIPT_NAME=/cgi-bin/pen.pl

256



CGIから出力したときはUSERやHOMEの設定が無いのが臭く感じるのですが、これらを設定することは可能なのでしょうか?

2007/11/18 23:49:11
id:b-wind No.5

b-wind回答回数3344ベストアンサー獲得回数4402007/11/19 22:58:37

ポイント20pt

CGIから出力したときはUSERやHOMEの設定が無いのが臭く感じるのですが、これらを設定することは可能なのでしょうか?

CGI はログインしているわけではないので、無いのは当然ですが、

$ENV{'USER'}='myuser';
$ENV{'HOME'}='/home/myuser'

とでもすれば任意に設定可能です。


kingtrはオプション-eで指定した文章を日本語に翻訳するプログラムです。

機能が知りたいのではなくて、これが実行される際にどういう設定が必要かとかそういう情報です。

ちなみにnobodyで実行しようとすると、

Cannot make directory /nonexistent/.king.

というエラーが出ます。

から、~/.king というディレクトリに設定ファイル等がありそうに見えます。

コメントはまだありません

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

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

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

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