ほぼ使いまわしですが微妙に面倒な部分でもあるんですよね
それに極稀にキャッチされないエラーがあって標準出力の方に流れていたり
最初から全部 console.log で標準出力に流せばいいのでは と思ったこともありましたが systemd のサービスとするときにうまくできませんでした
systemd のサービスの設定で StandardOutput というものがあり標準出力をどこに送るか設定できます
StandardOutput=file:/path/to/log
のようにすれば指定のファイルに書き込めます
これを使おうとしたのですが この機能に対応した systemd のバージョンは 236 です
そのとき使う OS は CentOS7 だったのですが CentOS7 の systemd は 219 です
systemd が古くて使えません
その後 CentOS8 になり systemd が 239 になりました
やっと使えると思ったのですが問題がありました
file: だと新規にファイルを作成します
リダイレクトで > を使うようなものです
再起動のたびにログがクリアされます
リダイレクトで > の代わりに >> を使うような感じで 追記モードで扱う必要があります
追記モードにするには
StandardOutput=append:/path/to/log
と file: を append: にします
しかし append: は systemd 240 からです
AlmaLinux8 でも CentOS8 の頃からバージョンは上がっていないので 239 です
1 足りないので使えません
一応 shell script を起動するサービスとして そのスクリプトが本来のプログラムを実行して標準出力を目的のファイルへリダイレクトするようにするという方法もあったのですが 余計なものを挟みたくなかったのでこの方法は使いませんでした
最近は AlmaLinux9 が出ていて AlmaLinux9 は 250 でした
やっと使えます
ということで今度なにか作るときには console.log で出力して systemd の設定ファイルでログファイルの場所を指定する感じにしようと思ってます