.png)
運用環境で systemd サービスの名前を変更する必要がある理由は複数あります。例:
- 新しいものとより区別するため
- 上司の命令だから
- レガシースクリプトのため
- ...
/etc/systemd/system/foo.service
次のように新しい汎用サービスが作成され、有効化され、開始されたと仮定します。[1]
systemctl daemon-reload
systemctl enable --now foo
次に、関連するプロセスに何ら影響を与えずに、名前をfoo.service
からに変更することができます。bar.service
通常の状況では、次のようにすればよいだけです。
mv foo.service bar.service
systemctl daemon-reload
systemctl disable foo
systemctl enable bar
すると次のようになります:
systemctl status foo
:running
not-found
disabled
systemctl status bar
:not-running
enabled
したがって、次のように修正するとよいかもしれません:
systemctl stop foo
systemctl start bar
または、再起動します。ただし、実稼働環境では、このような変更のためにアプリケーションを停止したくないため、これは実現可能ではありません。さらに、再起動は数か月または数年後にスケジュールされます。同時に、bar
見つからない実行中のサービスを停止する前に、誤って開始されないように、停止したサービスを長期間維持することは危険ですfoo
。
簡単に言うと、本番環境で systemd サービスの名前を変更するにはどのようなアプローチを使用しますか?
理想的な条件は、2 つのサービスに下位互換性があることです。つまり、停止するfoo
と停止も行われbar
、その逆も同様です。
答え1
私が知らないもっと良い方法があるかもしれませんが、サービスを再起動するまで、必要なものをほぼすべて取得できる回避策として、これが思い浮かびます。
-
既存のサービスファイル(および)を指す、希望する新しい名前のシンボリックリンクを作成します
systemctl daemon-reload
。Systemd
ユニットへのシンボリックリンクをエイリアスとして扱う別々のユニットではなく、両方の名前が同じユニット(同じステータス、同じすべて)を参照することを意味します。 - 次のメンテナンス期間中に実際にサービスを置き換えることを計画します。