動かざることバグの如し

近づきたいよ 君の理想に

特定の文字列を含むSystemctl serviceを一括再起動するコマンド

環境

やりたいこと

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 など。