我正在为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 - -