web-dev-qa-db-ja.com

Apache(2)は「そのようなファイルまたはディレクトリはありません: '/ usr / lib / cgi-bin / fst.cgi'の実行に失敗しました」

Ubuntu 10.10(Maverick Meerkat)で作業していて、 [〜#〜] cgi [〜#〜] スクリプトを Apache で実行していますが、次のエラーが表示されます。 .。。

[Sat errorNo such file or directory:exec of '/ usr/lib/cgi-bin/fst.cgi' failed [Sat Oct 22 02:56:45 2011] [error] [client127.0.0.1]スクリプトヘッダーの早期終了:fst.cgi

私のスクリプトは

#!/usr/bin/Perl
print "Content-type:text/html\n\n";
print "hello world";

ファイルのアクセス許可を設定しました...

また、ファイルApache.confに次の行を追加しました。

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory /usr/lib/cgi-bin/>
   Options +ExecCGI
</Directory>

AddHandler cgi-script .cgi .pl

しかし、それでも同じエラーが表示されます。考えられるすべての変更を行いましたが、成功しませんでした...

15
Manju

/ var/log/Apache2/error_logで見つかったのと同じエラーが発生しました。私はついに、Perlスクリプトが(Parallels仮想マシンを介して)Windowsシステムから直接コピーされたことに気付きました。Windowsのキャリッジリターン「\ r\n」がこのエラーの原因であるようです。

ASCIIモードを使用してこのPerlスクリプトをWindowsからMacにFTPで転送して "\ r\n"を "\ r"に自動的に変換すると、同じPerlスクリプトが変更なしで正しく機能します。

31
Sam Tseng

同じ問題が何度か発生しました。ファイル内のShebangを次のように変更してみてください。

#!/usr/bin/Perl -w

なぜこれがスクリプトを実行させるのか、私を打ち負かします...あなたが見つけたら私たちにも知らせてください。

11

「そのようなファイルまたはディレクトリはありません」というエラーメッセージは、ApacheまたはPerlからのものではありません。 Apacheがスクリプトを呼び出すと、システムのコマンドラインインタープリター(CLI)に実行が渡されます。このCLIはスクリプトファイルを開き、最初の行「#!/ usr/bin/Perl」(シバン行)を読み取ります。

Sam Tsengが詳しく説明したように、ファイルには明らかにWindowsの改行文字シーケンス「\ r\n」(16進コード:x0D x0A、記号:CR LF)が含まれています。これで、CLIインタープリターは「\ n」文字まで行を読み取ります。 CLIは「\ r」文字を認識しないため、パス「/ usr/bin/Perl \ r」の一部になり、改行の一部ではなくなります。

オプション '-w'でこの問題が修正されるのはなぜですか?

オプション「-w」を文字「\ r」よりも追加すると、引数「-w\r」の一部になります。 Perl実行可能ファイルへのパスは「/ usr/bin/Perl」にあり、「-w\r」がコマンドライン引数として渡されます。ただし、Perlは優れており、「-w\r」オプションを処理するときにエラーは発生しません。

10
Doomjunky

同様のエラーが発生しました:(2)そのようなファイルまたはディレクトリはありません: '/ var/www/cgi-bin/aaa.py'の実行に失敗しました。そして、上記のような答えは解決できません。それから私はそれを見つけます:vim aaa.py :set ffそしてファイルフォーマットはdosです。 :set ff=unixとwqはすぐにそれを修正しました。

2
saaav

Windows環境内でファイルを作成するときに生成される「Windowsのキャリッジリターン」を削除する必要があります。

これはコマンドで簡単に実行できます

dos2unix fst.cgi fst.cgi

最初のfst.cgiは変換するファイルで、2番目は変換先のファイル名です。これは同じままにすることができます。

次のステップは、コマンドを実行することです

 chmod 755 fst.cgi

これにより、ファイルのアクセス許可が上書きされ、ファイルを実行できるようになります。

幸運を

1
Allen

同じ問題でほぼ1日かかります。可能性を提供したいと思います。

私のPCとリモートサーバーOSはどちらもUbuntu 16.04です。そして、私は FileZilla を使用してPCからリモートサーバーにファイルを転送しています。 デフォルトの転送タイプAutoに設定されています。これが私の場合の理由です。

解決策は、デフォルトの転送タイプBinaryとして設定することです。そして、ナビゲーションパスは次のとおりです:編集->設定->設定->転送->ファイルタイプ->デフォルトの転送タイプ:

0
Ian
  • スクリプトがApacheユーザーで正常に実行されることを確認してください:# su -c /usr/lib/cgi-bin/fst.cgi Apache
  • ディレクトリ/usr/lib/cgi-binに755の権限があることを確認してください
  • スクリプト/usr/lib/cgi-bin/fst.cgiに755の権限があることを確認してください
0
dma_k