2016-06-18 17 views
1

私は私の展開スクリプトの名前にタイムスタンプまたはいくつかのランダムな文字列を持つ新しいディレクトリに新しいリリースをアップロードNode.jsflighplanでpm2を再ロード/再起動する方法と、シンボリックリンクのディレクトリを認識していますか?

によって構築された私のWebサービスを展開するflighplanを使用しています。サーバー上にすべてのリリースを保存しているので、特定のリリースへのリンクを変更するだけで簡単にロールバックし、ダウンタイムゼロの展開が可能です。

サービス名で名前が付けられたメインディレクトリは、アップロード後に新しいリリースのディレクトリに変更される単なるシンボリックリンクです。

ln -snf ~/tmpDir ~/appName 

enter image description here

私の問題はpm2は私のサーバーは、それが以前のリリースの元のパスを使用していますrestarsとき、それがシンボリックリンクで結合して、新しいディレクトリリンクへのリンクをたどっていないです指している。

pm2を再起動または再ロードしてシンボリックリンクに気づかせる方法はありますか?

+0

私はPM2にその問題のAPIがあるとは思わない。 – MhmdAljobairi

+0

シンボリックリンクを変更した後、サービスをどのように再起動しますか? –

答えて

0

短い回答 - 変更するシンボリックリンクの中でpm2を実行しないでください。 pm2は、pm2 killコマンドを使用しない限り、シンボリックリンクが指している古いパスを常に選択します。

解決策 - 新しいディレクトリを作成し、smylinkの親ディレクトリとコードディレクトリ(mohmal-144など)にします。理解のために、このデプロイメントを呼び出すことができます。

/home/deploy /home/deploy/mohmal - > home/deploy/mohmal-144以下の構造を持つ必要があります。

pm2を使用している場合は、ecosystem.json(アプリケーションを起動するためのpm2 config)ファイルを使用する必要があります。このファイルはあなたが望むものに名前を付けることができますが。理解のために、このファイルをecosystem.jsonファイルと呼ぶことができます。

このecossystem.jsonファイル内のappsセクションで、cwdディレクトリを追加し、cwdはシンボリックリンクのパスをポイントする必要があります(シンボリックリンク先のパスではありません)。下記の例を参照してください。

{ 
    "apps": [ 
    { 
     "name": "mohmal", 
     "script": "src/bin/server.js", 
     "exec_mode": "cluster", 
     "instances" : "0", 
     "cwd": "/home/deploy/mohmal", 
     "error_file": "/var/log/mohmal/error.log", 
     "out_file" : "/var/log/mohmal/out.log", 
     "merge_logs": true 
    } 
    ] 
} 

このファイルは、この例ではdeployという名前の親ディレクトリに配置します。

ここでは、このディレクトリからpm2 start、pm2 restartコマンドを実行/使用します。 すでにシステムでpm2を実行している場合は、pm2 killを実行して古いプロセスをクリアするだけです。

推奨される変更を使用すると、pm2プロセスを強制終了する必要はありません。 シンボリックリンクの変更も反映されます。

関連する問題