環境
やりたいこと
Ubuntuでは多くのサービスがsystemdで管理されている。たまに複数のサービスを一気に再起動したいときもある。
そこで特定の文字列を含むsystemdのserviceを一発で再起動させるコマンドがほしい
コマンド
例えば末尾に「puma」を含むサービスを一括再起動したい場合は以下
systemctl list-units --type=service --all | grep 'puma.service' | grep running | awk '{print $1}' | xargs -r systemctl restart
このコマンドは、まず systemctl list-units で全てのサービスをリストし、その中から puma.service を含むものを grep でフィルタリングする。 次に awk でサービス名を抽出し、xargs を使って systemctl restart コマンドを実行していく。
もっとスマートに
systemctl try-restart '*puma.service'
- try-restart
- 指定したサービスが現在「実行中」の場合だけ再起動する。
- 停止しているサービスは起動しない(=強制的には起動しない)。
- '*puma.service'
- ワイルドカードによるサービス名の指定。*puma.service にマッチする複数のサービスを対象にする。
- 例:app1-puma.service, app2-puma.service など。