send PID of the main daemon to supervisor

If running under systemd, notify the supervisor about current PID
of Tor daemon.  This makes systemd unit simpler and more robust:
it will do the right thing regardless of RunAsDaemon settings.
This commit is contained in:
Tomasz Torcz 2015-01-09 22:17:50 +01:00 committed by Nick Mathewson
parent 180ecd6a2b
commit b17918726d
2 changed files with 18 additions and 4 deletions

View File

@ -3,11 +3,10 @@ Description = Anonymizing overlay network for TCP
After = syslog.target network.target nss-lookup.target
[Service]
Type = simple
Type = notify
NotifyAccess = all
ExecStartPre = @BINDIR@/tor -f @CONFDIR@/torrc --verify-config
# A torrc that has "RunAsDaemon 1" won't work with the "simple" service type;
# let's explicitly override it.
ExecStart = @BINDIR@/tor -f @CONFDIR@/torrc --RunAsDaemon 0
ExecStart = @BINDIR@/tor -f @CONFDIR@/torrc
ExecReload = /bin/kill -HUP ${MAINPID}
KillSignal = SIGINT
TimeoutSec = 30

View File

@ -55,6 +55,16 @@
#include "procmon.h"
#ifdef HAVE_SYSTEMD
# if defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__)
/* Systemd's use of gcc's __INCLUDE_LEVEL__ extension macro appears to confuse
* Coverity. Here's a kludge to unconfuse it.
*/
# define __INCLUDE_LEVEL__ 2
# endif
#include <systemd/sd-daemon.h>
#endif
/* From main.c */
extern int quiet_level;
@ -1018,6 +1028,11 @@ options_act_reversible(const or_options_t *old_options, char **msg)
start_daemon();
}
#ifdef HAVE_SYSTEMD
/* Our PID may have changed, inform supervisor */
sd_notifyf(0, "MAINPID=%ld\n", (long int)getpid());
#endif
#ifndef HAVE_SYS_UN_H
if (options->ControlSocket || options->ControlSocketsGroupWritable) {
*msg = tor_strdup("Unix domain sockets (ControlSocket) not supported "