systemdのExecStartPreで「!」とはどういう意味ですか?

systemdのExecStartPreで「!」とはどういう意味ですか?

!通話履歴を拡張! !前のコマンドを再実行してください。

cat  /lib/systemd/system/motion.service
ExecStartPre=!/bin/mkdir -p /var/log/motion

同じロジックは、!/bin/mkdir -p /var/log/motion再実行が/bin/mkdir -p /var/log/motion意味がないことを意味します。
どのように書かれましたかExecStartPre=/bin/mkdir -p /var/log/motion
どういう!意味ですか!/bin/mkdir

ベストアンサー1

同じ定義と設定がコマンドに影響を与えるのを防ぎUser=ますGroup=SupplementaryGroups=*.servicemkdir

明らかに、サービスファイルはmotionroot ではなくユーザーとして実際のサービスプロセスを開始するように設計されています。ただし、この/var/logディレクトリは通常rootユーザーのみを書き込むことができるため、サービスファイルは最初にrootとして実行されmkdir -p /var/log/motion(その後、サービスを実行しているユーザーに割り当てることができますか?)、サービスのログディレクトリがまだ存在しない場合に作成されます。

したがって、次のパターンがサービスファイルに表示されることを望みます。

[Service]
User=motion
ExecStartPre=!/bin/mkdir -p /var/log/motion      # but this runs as root
ExecStartPre=!/bin/chown motion /var/log/motion  # also this
ExecStart=/usr/bin/motion                   # only this runs as "motion"

おすすめ記事