「/usr/bin/env ノード: ディレクトリのファイルがありません」 - スーパーバイザーのみ

「/usr/bin/env ノード: ディレクトリのファイルがありません」 - スーパーバイザーのみ

Supervisor から Node.js アプリケーションを実行しようとすると、次のエラーが発生します。

/usr/bin/env node: No such file of directory

これはUbuntu 16.04を実行しているマシンで、実際には/usr/bin/nodeがインストールされており、/usr/bin/nodejsにシンボリックリンクされています。Node.js リポジトリだから走るときは

node -v
/usr/bin/env node -v

次のような結果になります:

v9.7.1

私のアプリケーションの Supervisor (v 3.2.0) の構成は次のとおりです。

[program:verdaccio]
command=/usr/bin/verdaccio
autostart=true
autorestart=true
user=ubu
environment=HOME="/home/ubu",USER="ubu",PATH="$PATH:/home/ubu/.local/bin"

どうしたの?

答え1

ノード バージョン マネージャーを使用している場合はnvm、次のコメントを使用してシンボリック リンクを作成します。

sudo ln -s "$(which node)" /usr/bin/node

答え2

実際には、これは非常に単純ですが、標準システムのリポジトリから Node.js をインストールした人の「/usr/bin/node へのシンボリックリンクがない」問題とはまったく関係がありません。

それはスーパーバイザーのタスク構成の問題です。つまり、

PATH="$PATH:/home/ubu/.local/bin"

物事を台無しにしています。これは、Node をグローバルではなく ~/.local/bin から実行したときのアーティファクトです。これを削除し、スーパーバイザーをリロードすると、アプリケーションは正常に動作するようになりました :)

誰かの役に立つことを願います。

答え3

ほとんどの場合、これは単純な命名の問題です。パッケージ マネージャーからインストールする場合、bin ファイルは nodejs と呼ばれることがあるため、次のコマンドを使用してシンボリック リンクを作成する必要があります。

ln -s /usr/bin/nodejs /usr/bin/node

関連情報