要求されたCGIプログラムを開始できません:/www/cgi-bin/first.cgi:テキストファイルが使用中です。

要求されたCGIプログラムを開始できません:/www/cgi-bin/first.cgi:テキストファイルが使用中です。

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操作を正しく完了すると、ファイルが閉じられ、「テキストファイルを使用中」エラーが削除されます。

関連情報