OpenWRTインストールで実行されているuhttpdサーバーでCGIとして実行するための非常に簡単なシェルスクリプトを作成しようとしています。
ファイルが呼び出され、/www/cgi-bin/first.cgi
次のようになります。
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<html><head><title>Bash as CGI"
echo "</title></head><body>"
echo "<h1>Hello world</h1>"
echo "Today is $(date)"
echo "</body></html>"
...私は一つ作りました。
chmod +x first.cgi
ファイルに。
プルしようとすると…
http://192.168.15.1/cgi-bin/first.cgi
...ブラウザは...
Unable to launch the requested CGI program:
/www/cgi-bin/first.cgi: Text file busy"
cat
シェルプロンプトからファイルをインポートできるので、vi
ファイルがどれほど忙しいのか、それをどのように把握するのかわかりません。
私は何が間違っていましたか?
答え1
まず、ファイルシステムがルート/www
にマッピングされていると推測します。つまり、フォルダが にマップされているので、 。http://servername/
/www/cgi-bin/
http://servername/cgi-bin/
http://servername/cgi-bin/first.cgi
読み取ることはできますが、httpサーバープロセスが読み取れない場合があります。ファイルモードは、ファイルグループの所有権がhttpdと同じグループに属しているかどうかによって異なります555 (r-xr-xr-x)
。550 (r-xr-x---)
もう1つの可能性は、$(date)に実行時に使用できないシェル外部コマンドが必要であることです。それなしで試してはいけません。
それでも動作しませんか?サーバーは、CGI の実行を許可する場所に対して難しい場合があります。これは通常http://servername/cgi-bin/
許可されます。これは、ファイル名が/www/cgi-bin/first.cgiの正しい場所にあることを意味します。uHTTPdドキュメントCGIフォルダを設定する必要があるようです。それ以外の場合、CGIはまったく許可されません。これは設定ファイルで確認してください。
私は一般的なUnixyの背景で答えており、OpenWRTまたはuHTTPdの詳細についてはあまり知りません。私は何十年もの間Unix / Linuxを使用してきましたが、一般的なアーキテクチャに非常に精通しています。
答え2
(恥ずかしい)答えは、CATを使用してファイルを作成し、Ctrl-Zを押して完了したことです。 Control-Z は CAT 操作をバックグラウンドにプッシュするため、CAT はまだファイルを開いたままにします。 Ctrl-Dキーストロークを使用してファイルのCAT操作を正しく完了すると、ファイルが閉じられ、「テキストファイルを使用中」エラーが削除されます。