コミットが行われるたびにNode.jsサーバーにコードを自動デプロイし、サーバーを永久に再起動する単純なbashスクリプトを作成しました。このスクリプトは、cronjob で定期的に実行されます。そうそう、サイトはまだリリース前の開発段階にあるため、サーバーは常に再起動しています。:)
このスクリプトは他にもいくつかのことを行いますが、実際に興味深い部分は次の 2 行のコードです。
forever stopall
forever start app.js
コマンドラインから手動でスクリプトを実行すると、これら 2 つのコマンドから次の出力が生成されます。
Stopping all node jobs
info: Forever stopped processes:
data: uid command script forever pid logfile uptime
data: [0] ev5a /usr/local/bin/node app.js 17482 17484 /home/ec2-user/.forever/ev5a.log 0:0:13:17.967
Starting up node server again
info: Forever processing file: app.js
ただし、ジョブが cron 経由で自動的に実行されると、次のように出力されます。
Stopping all node jobs
^[[32minfo^[[39m: No forever processes running
Starting up node server again
^[[32minfo^[[39m: Forever processing file: ^[[90mapp.js^[[39m
これは私にとって本当に奇妙です。スクリプトが cron を介して実行されると、Forever は停止しようとしたときに実行中の Node プロセスさえないと考えているようです。Node プロセスが実行されていることはわかっているので、なぜこれが表示されるのかわかりません。2 つの実行方法に違いはないようです。両方のスクリプトが同じユーザーとして実行されています。なぜフォーエバーがこのように奇妙な振る舞いをしているのか誰か知っていますか?