Node.jsのプログラムをsystemdで動かすと意図しない動作をどうにかする

目次1 背景1.1 例 コード1.2 例 systemd Unitファイル1.3 例 結果2 原因3 解決方法4 思ったこと 背景 Node.jsで書かれたプログラムをsystemdで動かすと 実行ディレクトリが変わってソースによっては意図しない動作をします。 例 コード [crayon-5b2a6e21471b5171035809/] 例 systemd Unitファイル [crayon-5b2a6e21471c4217786860/] 例 結果 [crayon-5b2a6e21471cb948387007/] requireで読み込んだプログラムはキャッシュされるため 逐一、使用する場面でキャッシュを削除し再度読み込むようなプログラムです。 systemd で動かすと結果の通り、キャッシュを削除していても Unix タイムスタンプが変更されずにいます。   原因 ソースコード fs.writeFileSync(‘/tmp/blog-test.log’, path.resolve(‘date.js’)); node test.js /root/blog-test/date.js systemd /date.js path.resolve(‘date.js’)は相対パスから絶対パスを取得する部分ですが これがうまく動いていません。 systemd は cgroups を使って管理されるため プログラムの実行パスが / となり、delete require.cache が動きませんでした。     解決方法 サーバー上では systemd で起動しています。 各エンジニアのローカル環境でも正常に動いてほしいので サーバー上に環境変数を用意して雑に対応しました。 [crayon-5b2a6e21471cd120915436/]     思ったこと 「○○エンジニアは、○○だけに精通していれば良い」という人に反対です 関連のある記事: コンテナ環境でcronの@rebootが動かない問題をsystemdで解決する 【順次追加】DTI ServersMan SIM LTE 100 レビュー! [Pandora FMS 6] pandora_server start error Chinachu Beta + Mirakurun + Rivarun + TVTest on Ubuntu で Chinachu でも TVTest でも視聴する Jenkinsとnewmanを組み合わせて自動APIテストを実現してみる