부팅시 / var / run 아래에 디렉토리를 만듭니다.


39

/var/run데몬의 사용자에게 부여 된 쓰기 권한을 가진 PID 파일 에 대한 자체 디렉토리가 필요한 데몬이 있습니다.

다음 명령 으로이 디렉토리를 만들 수 있음을 발견했습니다.

# mkdir /var/run/mydaemon

그런 다음 프로세스를 실행하려는 사용자 / 그룹으로 소유권을 변경할 수 있습니다.

# chown myuser:myuser /var/run/mydaemon

그러나이 디렉토리는 재부팅을 할 때마다 사라졌습니다! 머신을 부팅 할 때마다이 디렉토리를 만들려면 어떻게해야합니까?

답변:


55

systemd가 디렉토리를 작성하도록하는 두 가지 대안은 일반적으로 RuntimeDirectory서비스의 단위 파일에서 a를 선언하는 것 입니다.

RuntimeDirectory=, RuntimeDirectoryMode= 디렉토리 이름 목록을 가져옵니다. 설정된 경우 지정된 이름으로 하나 이상의 디렉토리가 /run장치가 시작될 때 아래 (시스템 서비스의 경우) 또는 $ XDG_RUNTIME_DIR (사용자 서비스의 경우) 아래에 작성 되고 장치가 중지되면 제거됩니다. 디렉토리는 지정된 액세스 모드를해야합니다 RuntimeDirectoryMode=, 사용자가 소유합니다 및 그룹에 지정 User=하고 Group=. 이를 사용하여 장치의 하나 이상의 런타임 디렉토리를 관리하고 수명을 디먼 런타임에 바인드하십시오. 지정된 디렉토리 이름은 상대적이어야하며 "/", 즉 생성하거나 제거 할 간단한 디렉토리를 참조해야합니다. 이는 권한 부족으로 인해 / run에서 런타임 디렉토리를 만들 수없고 사용 후 런타임 디렉토리가 자동으로 정리되도록하는 권한없는 데몬에 특히 유용합니다.

또는 더 복잡하거나 다른 구성 또는 수명 보증이 필요한 런타임 디렉토리 tmpfiles.d의 경우 패키지를 사용 하여 파일을 삭제하십시오 /usr/lib/tmpfiles.d/mydaemon.conf.

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -

실제 데몬이를 사용 systemd-sysv-generator하고 일주일 동안 충분한 학습 곡선을 가지고 있기 때문에 후자를 사용 했습니다. .conf 파일 하나와 한 줄만 있으면됩니다. 기분이 좋아 지금 B-)
user24601

난 이미 내에서 정의 된 후자를 했어 /usr/lib/tmpfiles.d/php7.3-fpm.conf그리고 /usr/lib/tmpfiles.d/php7.2-fpm.conf그것은 아직 만들어지지 않습니다 /run/php디렉토리.
MarthyM

3

시작할 때 디렉토리를 만드는 서비스를 만들었습니다.

vim /etc/systemd/system/mydaemon-helper.service

내용 /etc/systemd/system/mydaemon-helper.service:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

그런 다음이 서비스를 시작했습니다.

systemctl start mydaemon-helper

systemctl status mydaemon-helper

산출:

[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

마지막으로 시스템을 시작할 때로드하도록 시스템에 지시했습니다.

systemctl enable mydaemon-helper


좋아, 나는 그런 멍청한 사람을 고려할 때 이것을 내 질문에 넣었어야한다고 생각한다. 그래도 배우고 있습니다. 감사합니다.
user24601

2
아니요, 답변을 작성하는 것이 옳은 일이므로 사람들이 이에 대해 의견을 제시 할 수 있으며 귀하의 질문을 어지럽히 지 않습니다. 자신의 질문에 대답하는 것은 SO에 명시 적으로 권장됩니다. 그리고 당신의 대답도 틀리지 않습니다.이 작업을 수행하는 훨씬 더 좋은 방법이 있다는 것입니다. 또한 upvoted해서는 안됩니다. :)
Bryan Larsen

2
지금RuntimeDirectory 이 작업을 수행하는 더 좋은 방법 이지만 , 지시어가 존재하지 않는 이전 버전의 systemd (208)가있는 서버를 사용했기 때문에이 답변이 유일한 해결책입니다.
Davor Cubranic

서비스 사용자와 다른 사용자가 작성하고 소유 한 디렉토리가 필요하거나 재부팅 할 때까지 디렉토리를 유지하거나 여러 서비스간에 디렉토리를 공유해야하는 경우에도 여전히이를 수행하는 방법 인 것 같습니다.
Perkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.