답변:
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 - -
/usr/lib/tmpfiles.d/php7.3-fpm.conf
그리고 /usr/lib/tmpfiles.d/php7.2-fpm.conf
그것은 아직 만들어지지 않습니다 /run/php
디렉토리.
시작할 때 디렉토리를 만드는 서비스를 만들었습니다.
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
RuntimeDirectory
이 작업을 수행하는 더 좋은 방법 이지만 , 지시어가 존재하지 않는 이전 버전의 systemd (208)가있는 서버를 사용했기 때문에이 답변이 유일한 해결책입니다.
systemd-sysv-generator
하고 일주일 동안 충분한 학습 곡선을 가지고 있기 때문에 후자를 사용 했습니다. .conf 파일 하나와 한 줄만 있으면됩니다. 기분이 좋아 지금 B-)