特定のsystemd
ユニットが存在するかどうかを知りたいです。
これは動作するはずです:
私はこれを行うことができることを知っています:
systemctl list-unit-files | grep "^my.target"
しかし、もっと良い方法が必要だと感じています。
オプションで、 "-service"(他のsystemctl
コマンドのように)を指定する必要なしにmyを指定するだけでこのチェックを実行できるようにしたいと思います。
systemctl exists my
私はそれを行うためのネイティブのsystemd方法を知りませんが、systemctl list-unit-files
を(ab)使用することができます。
systemctl-exists() {
[ $(systemctl list-unit-files "${1}*" | wc -l) -gt 3 ]
}
これにより、次のように使用できる「テスト」関数が作成されます。
systemctl-exists my && echo my exists as a systemd unit
*
サフィックスは、systemdが指定された引数を任意の「タイプ」(サービス、ターゲット、またはマウント)と照合できるようにするためのものです。この関数は、少なくとも3行の出力を含む現在のsystemctl list-unit-files
出力にハードコード化されています(一致するユニットが存在しない場合)。一致する単位がある場合はさらに:
1. UNIT FILE STATE
(one or more matching unit files)
2. (a blank line)
3. "%d unit files listed."
同様の接頭辞が付いたユニットファイルがある場合、末尾のワイルドカードが誤検知につながる可能性があることにも注意してください。本物の「au.service」。ご存知の場合は、サービス名を詳しく説明してください:systemctl-exists au.service
は正しいことを行います。
最初はsystemctl cat
がフィルターとして機能すると思っていましたが、引数がserviceであることを想定しているため、他のタイプ(ターゲットやマウントなど)には適切にフィルターされません。