! 통화내역 확장! ! 이전 명령을 다시 실행하십시오.
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
루트가 아닌 사용자로 실제 서비스 프로세스를 시작하도록 설계되었습니다. 그러나 이 /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"