コマンド出力を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
そして、バックティックは不要なので除去できます。