I’m asking in both contexts: technically and stylistically.
Can my application/daemon keep a pidfile in /opt/my_app/run/?
Is it very bad to do so?
My need is this: my daemon runs under a specific user, and the implementor must mkdir a new directory in /var/run, chown, and chgrp it to make my daemon run. Seems easier to just keep the pidfile local (to the daemon).
I wouldn’t put a pidfile under an application installation directory such as
/opt/my_app/whatever. This directory could be mounted read-only, could be shared between machines, could be watched by a daemon that treats any change there as a possible break-in attempt…The normal location for pidfiles is
/var/run. Most unices will clean this directory on boot; under Ubuntu this is achieved by/var/runan in-memory filesystem (tmpfs).If you start your daemon from a script that’s running as root, have it create a subdirectory
/var/run/gmooredaemonand chown it to the daemon-running user beforesuing to the user and starting the daemon.On many modern Linux systems, if you start the daemon from a script or launcher that isn’t running as root, you can put the pidfile in
/run/user/$UID, which is a per-user equivalent of the traditional/var/run. Note that the root part of the launcher, or a boot script running as root, needs to create the directory (for a human user, the directory is created when the user logs in).Otherwise, pick a location under
/tmpor/var/tmp, but this introduces additional complexity because the pidfile’s name can’t be uniquely determined if it’s in a world-writable directory.In any case, make it easy (command-line option, plus perhaps a compile-time option) for the distributor or administrator to change the pidfile location.