Crie um diretório sob / var / run at boot

21

Eu tinha um daemon que precisava de seu próprio diretório em /var/run para seu arquivo PID com permissão de gravação concedida ao usuário do daemon.

Eu descobri que eu poderia criar este diretório com estes comandos:

# mkdir /var/run/mydaemon

Então, eu poderia alterar sua propriedade para o usuário / grupo sob o qual gostaria de executar o processo:

# chown myuser:myuser /var/run/mydaemon

Mas este diretório seria GONE sempre que eu emitir uma reinicialização! Como faço para que este diretório seja criado toda vez que a máquina inicializa?

    
por user24601 29.05.2016 / 05:08

2 respostas

32

Duas alternativas para criar diretórios systemd, geralmente o mais fácil é declarar RuntimeDirectory no arquivo unitário de seu serviço:

RuntimeDirectory=, RuntimeDirectoryMode= Takes a list of directory names. If set, one or more directories by the specified names will be created below /run (for system services) or below $XDG_RUNTIME_DIR (for user services) when the unit is started, and removed when the unit is stopped. The directories will have the access mode specified in RuntimeDirectoryMode=, and will be owned by the user and group specified in User= and Group=. Use this to manage one or more runtime directories of the unit and bind their lifetime to the daemon runtime. The specified directory names must be relative, and may not include a "/", i.e. must refer to simple directories to create or remove. This is particularly useful for unprivileged daemons that cannot create runtime directories in /run due to lack of privileges, and to make sure the runtime directory is cleaned up automatically after use.

Ou para diretórios de tempo de execução que exigem configurações mais complexas ou diferentes ou garantias vitalícias, use tmpfiles.d e mande seu pacote soltar um arquivo /usr/lib/tmpfiles.d/mydaemon.conf :

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -
    
por 29.05.2016 / 08:24
2

Eu criei um serviço que faria o dir no início:

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

O conteúdo de /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

Então comecei este serviço:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Saída:

[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.

Por fim, eu disse ao sistema para carregá-lo na inicialização:

systemctl enable mydaemon-helper

    
por 29.05.2016 / 05:08