🔥

[node.js][pm2][ts-node]PM2をOS起動時に自動起動する(core dumpを作成しないようにする)

2023/07/16に公開

概要

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のインストール等はすでに完了している想定です。
インストールはこちらの記事を参照ください。

設定

設定は基本的に公式サイト通りになります
https://pm2.keymetrics.io/docs/usage/startup/

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 sizeSoft Limit0になっていれば大丈夫です。

$ 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