コマンド出力の内容を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
どうすれば問題を解決できますか?
まず、このスクリプトの設定は、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
また、バックティックは不要なので、取り出すことができます。