◆ チェック対象がコマンドライン引数で JSON の方は見てない
◆ JSON で設定しても毎回警告が出る
◆ 設定自体は有効なので無視でいい
◆ 機能の使いみちは
  ◆ 起動時間が minUptime み満たずに終了した場合に
  ◆ 再起動まで spinSleepTime だけ待つ

警告は出るけど設定されてる

forever で特に設定をしなければ

warn:    --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms

というメッセージが出ます

このメッセージは minUptime と spinSleepTime が未設定というものです
これを JSON で設定しても消えません

原因はチェック対象が JSON ではないコマンドラインの方だからです
https://github.com/foreversd/forever/blob/1.0.0/lib/forever/cli.js#L266-L277

ここで options.minUptime と options.spinSleepTime をチェックしてますが options はコマンドライン引数をパースしたものが入っています
JSON をパースしたものは configs の方に入ってます

なので 警告出したりデフォルト値を設定したりしていますが JSON 設定を使ってると関係ありません
その後 options と configs のそれぞれをマージしていますが configs のほうが優先なのでちゃんと JSON の設定が使われます

特に問題が出るわけでもないですが forever もこういう細かなバグがいくつかあります

minUptime と spinSpeepTime

この設定が一体なんなのかわかるようでわかってなかったので使用箇所を見てみました

使用箇所はここです
https://github.com/foreversd/forever-monitor/blob/1.7.1/lib/forever-monitor/monitor.js#L212

モニタプロセスが子プロセス(forever で起動する JavaScript ファイル)の再起動を setTimeout で遅らせてます
これは spinning が true のときでそうでないなら即時再起動です

spinning は終了までの起動時間が minUptime より短い場合に true です
https://github.com/foreversd/forever-monitor/blob/1.7.1/lib/forever-monitor/monitor.js#L188

この機能の使いみちは シンタックスエラーや起動時の外部サーバへの接続など 起動してからすぐにエラーが起きて終了した場合に高速で再起動を繰り返さないようにできるというものです
最大再起動回数がないとエラーログがすごいことになってしまいますからね
起動から 5 秒以内に終了した場合は 3 秒あけてから再起動となれば 大量のエラーの繰り返しになるのを防げます
また 接続エラーなら数秒すれば回復してる場合もあると思うので それまでの無駄な再接続チェック回数を減らすことにもなります

反対に何時間も起動してるものなら 想定外のリクエストを受けたときなど特定の処理や条件が原因でエラーがあることがほとんどなので すぐ再起動してくれるほうが助かります

STOPPED

この機能は再起動までの時間だけで コード的にも他に関係しそうにないのですが minUptime と spinSleepTime を設定すると stop コマンドで止められなくなりました

stop 命令を実行すると普段はすぐに終わるのですが しばらく待っても forever コマンドが終了しません
Ctrl-C で無理やり終了してから status を見ると uptime に STOPPED という見慣れないものが表示されていました
これまでは stop を実行するとモニタプロセスごと終了するので uptime に STOPPED と出るのではなく行が出てませんでした