systemd, logrotate e arquivos PID

1

Estou empacotando um daemon para o debian 8 e o systemd.

O daemon pode criar o arquivo PID sozinho, mas não possui permissões para gravar / executar devido ao usuário não-root. É usado para criar o arquivo PID via script sysV init antigo, mas não funciona no systemd.

Eu posso usar a solução alternativa no arquivo de serviços da seguinte forma:

Environment="PIDDIR=/var/run/mydaemon"
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p $PIDDIR
ExecStartPre=/bin/chown -R mydaemon. $PIDDIR

Mas isso não parece certo.

Eu posso usar / tmp como $ PIDDIR, mas também parece errado.

Na verdade, a única razão pela qual eu preciso de um arquivo PID é o posttrotate do logrotate, enviando SIGUSR1 para o daemon:

[ -s /run/mydaemon.pid ] && kill -USR1 'cat /run/mydaemon.pid'

Também é possível pesquisar o pid do daemon com o pgrep, mas parece não ser confiável.

copytruncate no logrotate parece não ser a melhor opção por causa da perda de alguma parte do log.

Então, qual é o caminho certo para gerenciar arquivos PID via systemd?

E existe uma maneira de enviar sinais aleatórios para daemons via systemd?

    
por Paul K. 31.03.2016 / 11:45

2 respostas

2

O Systemd possui um mecanismo dedicado para criar diretórios e arquivos temporários: systemd-tmpfiles e tmpdfiles.d

Em suma, seu pacote descarta um arquivo /usr/lib/tmpfiles.d/mydaemon.conf :

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 mydaemon daemon -   -
    
por 31.03.2016 / 13:57
0

no uso do arquivo system.service

ExecReload=/bin/kill -USR1 $MAINPID

e no script logrotate use

systemctl reload SERVICENAME
    
por 18.09.2018 / 14:14