From 04ace92c33a699f75445dc99c30d521311aba826 Mon Sep 17 00:00:00 2001 From: Steve Arnold Date: Mon, 6 Aug 2018 16:38:30 -0700 Subject: [PATCH] Add daemon-mode pid file creation when not configured for systemd Signed-off-by: Steve Arnold --- erts/epmd/src/epmd.c | 39 ++++++++++++++++++++++++++++++++++++++- erts/epmd/src/epmd.h | 3 +++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/erts/epmd/src/epmd.c b/erts/epmd/src/epmd.c index 44e997e609..c74888a1ee 100644 --- a/erts/epmd/src/epmd.c +++ b/erts/epmd/src/epmd.c @@ -40,6 +40,37 @@ static int check_relaxed(void); #ifdef __WIN32__ static int has_console(void); #endif +#ifndef HAVE_SYSTEMD_DAEMON +static int create_pidfile(void); +static const char *pidfile = EPMD_PIDFILE; +#endif + +#ifndef HAVE_SYSTEMD_DAEMON +static int create_pidfile(void) +{ + int fd; + + unlink(pidfile); + + /* open the pidfile */ + fd = open(pidfile, O_WRONLY|O_CREAT|O_EXCL, 0644); + if (fd >= 0) { + FILE *f; + + /* write our pid to it */ + f = fdopen(fd, "w"); + if (f != NULL) { + fprintf(f, "%d\n", getpid()); + fclose(f); + /* leave the fd open */ + return 0; + } + close(fd); + } + + return -1; +} +#endif /* (no) HAVE_SYSTEMD_DAEMON */ #ifdef DONT_USE_MAIN @@ -340,6 +371,13 @@ static void run_daemon(EpmdVars *g) umask(0); +#ifndef HAVE_SYSTEMD_DAEMON + if (create_pidfile() < 0) { + dbg_perror(g,"could not create pidfile %s", pidfile); + epmd_cleanup_exit(g,1); + } +#endif /* HAVE_SYSTEMD_DAEMON */ + for (fd = 0; fd < g->max_conn ; fd++) /* close all files ... */ close(fd); /* Syslog on linux will try to write to whatever if we dont @@ -614,4 +652,3 @@ static int check_relaxed(void) char* port_str = getenv("ERL_EPMD_RELAXED_COMMAND_CHECK"); return (port_str != NULL) ? 1 : 0; } - diff --git a/erts/epmd/src/epmd.h b/erts/epmd/src/epmd.h index cffcd4ae7a..e53322acf5 100644 --- a/erts/epmd/src/epmd.h +++ b/erts/epmd/src/epmd.h @@ -20,6 +20,9 @@ /* The port number is defined in a makefile */ +/* The name and path to the pid file */ +#define EPMD_PIDFILE "/var/run/epmd.pid" + /* Definitions of message codes */ /* Registration and queries */ -- 2.17.0