2016-07-04 29 views
12

centOS 7サーバーにnode.jsとnpmをインストールしました。しかし、私はpm2に問題があります。 実際には本当の問題は、Linuxでの経験がなく、パスを変更する方法がわからないことです。 ここにフォルダ構造があります。PM2コマンドが見つかりません

* bin 
* code 
* error_docs 
* httpdocs 
* lib64 
* logs 
* tmp 
* var 
* chat(my node.js folder) 
    * node_modules 
     * pm2 
     * sockjs 
    * server.js 
* dev 
* etc 
* lib 
* local 
* sbin 
* usr 

私はcd chatを入力して、フォルダを入力しnpm install pm2とPM2をインストールしました。

その後、私のserver.jsにpm2 server.jsと入力してpm2を使用してみましたが、「pm2コマンドが見つかりません」というメッセージが返されました。問題なくnode.jsを使用できますが、pm2は動作しません。

どうすればこの問題を解決できますか?グローバル

答えて

25

インストールPM2:rootとして

実行:

npm i -g pm2 

またはユーザーが

sudo npm i -g pm2 

sudoの-ERであるし、ユーザーに戻る(またはルートに滞在する場合には、それならばrootユーザーによって作成された)を実行して実行します。

pm2 start server.js 
+1

ありがとうございます。それは私のために働いた。私は5分でこれを答えとして受け入れています。 –

+1

PM2を使用してプロダクションモードのビルドを作成できますか? – Deep

+1

@DeepKakkar実際にはpm2はnodejsのappプロセスを実行/監視するためのパッケージです。あなたはビルドツールを探しているので、展開/パッケージングの自動化を行うwebpack、gulp、gruntを見てください。 PM - パッケージマネージャではなくプロセスマネージャを表します。 – num8er

3

PM2 Node.jsアプリケーションのプロセスマネージャ。 PM2は基本的にアプリケーションを管理します(バックグラウンドでサービスとして実行します)。だから、これは我々がグローバルPM2をインストールする方法のsudo権限が

sudo npm install -g pm2 

を占めると-gオプションは、それが可能なシステム全体だように、グローバルモジュールをインストールするには、NPMに指示されます。 これをインストールすると、としてインストールパスを確認してください。

whereis pm2 
pm2: /opt/node/bin/pm2 /opt/node/lib/node_modules/pm2/bin/pm2 

今、私たちは、スタートアップbashスクリプトでこのパスを追加する必要があります。 〜/ .bashrcファイルに次の行を追加します。

export PATH=$PATH:/opt/node/lib/node_modules/pm2/bin 

source ~/.bashrc 

、今では、実行する必要があります(ので、bashスクリプトが実行され、パスが設定されている)再ログインしたり、次のようにbashスクリプトを調達。 pm2の状態を確認してください

pm2 status 
+1

実行時に '/ usr/bin/pm2'または'/usr/local/bin/pm2'を実行可能にするために、 '.bashrc'、cuzにパスを追加する必要はありません。おそらく、別のディストリビューションでは、そこに置かないかもしれないし、ソースからコンパイルした後かもしれない。あなたがやったことを忘れた: 'make install'またはすべての結果を手動で'/opt/node'にコピーした。 'sudo ln -s/opt/node/bin/pm2/usr/bin/pm2' – num8er

+1

ありがとう@ num8er、これを試してみます。ニース明確化しかし:-) – Nicks

0

PM2でポート80を使用する際のエラー?

これについて間違った方法は、sudoで実行しようとしています。

これを行う正しい方法は、ルートsudo suとしてログインし、次にpm2 start app.js --name "whatever" --watchを実行することです。

rootでログインすると、bashrcまたはプロファイルファイルを設定する必要はありません。しかし、rootとして、スクリプトはnodejsのexec()機能を危険に使用することができます。これを避けるには、まずスクリプトでルートの処理を行い、タイムアウト後に特権を減らしてください。

// I use port 80 first.. at this point the script's UID is root. 

app.listen(80); 

// After 2 seconds we switch to UID `azureuser`, which obviously isn't root anymore. 

setTimeout(function() { 
    process.setuid("azureuser"); 
}, 2000); 
+0

あなたは質問を理解していないようです。 (: – num8er

関連する問題