[node.js][pm2][ts-node]PM2をOS起動時に自動起動する(core dumpを作成しないようにする)
概要
PM2で管理しているnode.jsアプリケーションのOS起動時に自動起動する設定を行います。
自動起動スクリプトをそのまま使用した際、OSのユーザー設定でデフォルトがcore dumpファイルを作成しないようになっていても、作成されてしまう事があったので、作成しないよう修正をします。
(amazon linux2だとデフォルトはコアダンプを作らないようなっているっぽい?)
core dumpファイル(core.xxx):
クラッシュした内容などが書かれているファイル。
数百MBや1GBくらいをポンっと作ってしまうので、PM2で自動起動→停止→自動起動→停止を知らず繰り返しているとサーバーのディスク容量がいっぱいになるので、注意が必要になります。
詳細を調べたいときや(OSクラッシュ時など)容量に十分空きがあればよいですが、nodeアプリケーション停止でPM2が出力するエラーログ以上のものが不要でしたら作らなくてもよいのかなと思いました。
環境
- サーバー:amazon linux 2
- node:16.13.1
- pm2:5.3.0
- viでファイルの編集・保存が出来る
前提
PM2のインストール等はすでに完了している想定です。
インストールはこちらの記事を参照ください。
設定
設定は基本的に公式サイト通りになります
PM2のstartupコマンドを実行
$ pm2 startup
startupの登録
コンソールに出力された内容をコピペして実行
startupコマンド実行で以下のような内容がコンソールに出力されるので、コピペじて実行する
サンプル:
sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v14.3/bin pm2 startup <distribution> -u <user> --hp <home-path>
例:amazon linux2のec2-userなら以下のような感じ
sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v16.13.1/bin /home/ec2-user/.nvm/versions/node/v16.13.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user
上記コマンドを実行した時点で自動起動は可能になっています。
設定を保存する
$ pm2 save
core dumpファイルを作成しないようにする
上記の流れで、自動起動スクリプトの内容が表示されていますが、その中の LimitCORE
部分がデフォルト設定より優先されるようなので手動で修正します。
リミット値を変更する
$ sudo vi /etc/systemd/system/pm2-ec2-user.service
変更前:LimitCORE=infinity
↓
変更後:LimitCORE=0
に変更し、ファイルを保存する
上記でOS再起動時もコアダンプファイルが作成されないようになります。
確認
OSユーザーのコアダンプデフォルト設定の確認
0
の場合はコアダンプを作成しないになっている
$ ulimit -c
0
プロセス毎の確認
下記設定ファイルの内容でプロセス毎の設定値確認が可能です
Max core file size
の Soft Limit
が 0
になっていれば大丈夫です。
$ cat /proc/プロセスID/limits
例:下記キャプチャの場合
$ cat /proc/5665/limits
- PM2のプロセスIDはpsコマンドでみるか、
$ pm2 list
コマンドで表示されるpid
になります。 - もし
pid
が表示されない場合、ターミナル画面の横幅を広げてみてください
自動起動の削除
PM2のunstartupコマンドを実行
$ pm2 unstartup systemd
登録時と同じような内容がコンソールに出力されるので、コピペして実行する
サンプル:
sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v14.3/bin pm2 unstartup <distribution> -u <user> --hp <home-path>
以上です。
Discussion