systemd,logrotate和PID文件

我正在为debian 8和systemd打包一些守护进程。

守护进程可以自己创buildPID文件,但由于非root用户,它没有写入/运行的权限。 它用来通过旧的sysV init-script创buildPID文件,但是它在systemd上不起作用。

我可以像这样在服务文件中使用解决方法:

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

但它看起来不正确。

我可以使用/ tmp作为$ PIDDIR,但它也似乎是错误的。

实际上,我需要一个PID文件的唯一原因是logrotate的postrotate发送SIGUSR1到守护进程:

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

也可以使用pgrepsearch守护进程的pid,但似乎是不可靠的。

logrotate中的copytruncate似乎不是最好的select,因为丢失了部分日志的risc。

那么,通过systemdpipe理PID文件的正确方法是什么?

有没有办法通过systemd发送随机信号到守护进程?

Systemd有专门的机制来创build临时目录和文件:systemd-tmpfiles和tmpdfiles.d

简而言之,你的软件包会删除一个文件/usr/lib/tmpfiles.d/mydaemon.conf

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