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

분명히 서비스 파일은 motion루트가 아닌 사용자로 실제 서비스 프로세스를 시작하도록 설계되었습니다. 그러나 이 /var/log디렉터리는 일반적으로 루트 사용자만 쓸 수 있으므로 서비스 파일이 먼저 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"

관련 정보