!通話履歴を拡張! !前のコマンドを再実行してください。
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=
*.service
mkdir
明らかに、サービスファイルはmotion
root ではなくユーザーとして実際のサービスプロセスを開始するように設計されています。ただし、この/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"