Skip to content

docs(ops): 実効env確認の pid 取得を pgrep から pm2 jlist へ是正 - #8

Closed
appdevelopsk wants to merge 2 commits into
mainfrom
docs/ops-launcher
Closed

appdevelopsk wants to merge 2 commits into
mainfrom
docs/ops-launcher

Conversation

@appdevelopsk

Copy link
Copy Markdown
Owner

問題

docs/DEPLOY.md (5) に記載していた実効env確認コマンドに欠陥があった。

ssh <vps> "tr '\0' '\n' < /proc/$(pgrep -f 'toolify.*server.js')/environ | ..."

pgrep -f はプロセスの コマンドライン全体 を見るため、ssh で送った自分のコマンド文字列(bash -c ... 'toolify.*server.js' ...)に先当たりする。その結果、無関係なラッパープロセスの environ を読み、NODE_OPTIONS=300 という誤答を返していた。

VPS 上で再現確認済み:

$ pgrep -f 'toolify.*server.js'
3955375
$ tr '\0' ' ' < /proc/3955375/cmdline
bash -c pgrep -f 'toolify.*server.js' | head -5; ...

本体プロセス(pid 3950723)は一度も返ってこない。

修正

pm2 jlist の JSON から name == "toolify"pid をキーで取り出す。綴りの当てずっぽうに依存しない。

実測結果:

PID=3950723
HOSTNAME=toolify365.com
NODE_OPTIONS=--max-old-space-size=400
PORT=8500

dump.pm2 に残る NODE_OPTIONS=300 は誤りではなく既知の残骸で、実効値は 400 が正。今回の修正でそれを正しく読めるようになった。

ドキュメント変更のみ。アプリの挙動には影響しない。

https://claude.ai/code/session_01ENHPNZ5ngcdrTHJ2H6oAFd

PM2 が実行している /opt/appcfg/toolify-start.sh は VPS 上にしか存在せず、
全ブランチの履歴を通じて一度も追跡されていなかった(VPS のディスクが飛べば
復元手段がない)。現物をそのまま ops/toolify-start.sh として取り込む。

あわせて docs/DEPLOY.md に 2026-09-17〜18 の本番障害で判明した罠を記録:

- rsync -az --delete の同期先に起動スクリプトを置くと毎回消える(502 の原因)
- HOSTNAME=127.0.0.1 は自己 proxy の EPROTO で全ページ 500。公開ドメイン名を使う
- 既定ポート 3000 は別アプリが占有しているので PORT=8500 が必須
- NODE_OPTIONS の heap 上限 300 では V8 が OOM abort する(現在 400)
- dump.pm2 の古い値は実効値を汚さない。判定は /proc/<pid>/environ で行う
- 上記はいずれもデプロイが「成功」表示のまま起きる(落ちるのはスモークテストだけ)

deploy.yml は変更しない。自動配置は上記1点目と干渉するため反映は手動のままとする。
本番の挙動は変わらない(ドキュメントとスクリプトの保全のみ)。

Claude-Session: https://claude.ai/code/session_01ENHPNZ5ngcdrTHJ2H6oAFd
pgrep -f 'toolify.*server.js' は ssh で送った自分のコマンド文字列に
先当たりし、無関係プロセス(bash -c ...)の environ を読んで
NODE_OPTIONS=300 という誤答を返していた。VPS 上で再現確認済み
(pgrep が返すのは自分自身の pid のみ、本体 3950723 は含まれない)。

pm2 jlist の JSON から name=="toolify" の pid をキーで取り出す方式に変更。
実測で PORT=8500 / HOSTNAME=toolify365.com / heap=400 を正しく返すことを確認。

Claude-Session: https://claude.ai/code/session_01ENHPNZ5ngcdrTHJ2H6oAFd
@appdevelopsk

Copy link
Copy Markdown
Owner Author

PR#9 で置き換えたためクローズする。

PR#7 が squash merge された結果、このブランチは未 squash の同内容コミットを抱えて docs/DEPLOY.md がコンフリクトしていた。加えてこのブランチは main より古く、そのまま merge すると直前にデプロイした SEO 修正 (a1d0c90) を巻き戻す差分を含んでいた。

現在の main の上に pid 修正のみを cherry-pick し直した PR#9 (687c41e) で反映済み。

https://claude.ai/code/session_01ENHPNZ5ngcdrTHJ2H6oAFd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant