/var/run
데몬의 사용자에게 부여 된 쓰기 권한을 가진 PID 파일 에 대한 자체 디렉토리가 필요한 데몬이 있습니다.
다음 명령 으로이 디렉토리를 만들 수 있음을 발견했습니다.
# mkdir /var/run/mydaemon
그런 다음 프로세스를 실행하려는 사용자 / 그룹으로 소유권을 변경할 수 있습니다.
# chown myuser:myuser /var/run/mydaemon
그러나이 디렉토리는 재부팅을 할 때마다 사라졌습니다! 머신을 부팅 할 때마다이 디렉토리를 만들려면 어떻게해야합니까?
답변
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 - -
답변
시작할 때 디렉토리를 만드는 서비스를 만들었습니다.
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