CGIプログラムリダイレクトに失敗しました

CGIプログラムリダイレクトに失敗しました

コマンド出力をCGIプログラムのファイルにリダイレクトしようとしています。私にとって問題は、出力ファイルが生成されなかったことです。

CGIコードの断片は次のとおりです。

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo "<html>"
echo "<body>"

`mysql -u root -predhat -H  -D mysql -e "select host,db from  db;" > output.txt`

 echo "</body>"
 echo "</html>" 

CGIスクリプトはHTMLプログラムから呼び出されます。また、コマンドINTO OUTFILEで作業できますが、出力リダイレクトはすべてのコマンドで機能する必要があります。mysql

所有権は次のとおりです。

  #ls -l /var/www/cgi-bin/example.sh
  -rwxr-xr-x 1 root root 839 Apr 11 21:34 /var/www/cgi-bin/example.sh

# ps -ef | grep httpd root 2442 1 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2464 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2465 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2466 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2467 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2468 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd

この問題をどのように解決できますか?

答え1

まず、このスクリプトはWebサーバー(Apacheのようです)を実行しているユーザーが実行できるように設定されていますか?スクリプトの権限を見ると、これを確認できます。

$ ls -l somescript.cgi
-rwxrwxr-x. 1 apache apache 1199 Jan 17 20:47 somescript.cgi

誰でも実行する権限が必要です。スクリプトをユーザーが所有している場合は、apache少なくとも所有者だけが実行できます。

それでは、次にコマンド出力がどこにあるかに焦点を当てますmysql。 Apacheがmysqlファイルを書き込もうとしている場所に書き込めない場合がありますoutput。次のように実際の物理的な場所に設定します。

mysql -u root -predhat -H  -D mysql -e "select host,db from  db;" \
    > /tmp/output.txt

そして、バックティックは不要なので除去できます。

関連情報