24 #include <baseapp/daemonize.h> 25 #include <sys/types.h> 26 #include <utils/system/argparser.h> 31 # include <libdaemon/dfork.h> 32 # include <libdaemon/dlog.h> 33 # include <libdaemon/dpid.h> 34 # include <sys/stat.h> 35 # include <sys/wait.h> 48 const char *fawkes_pid_file;
54 fawkes_daemon_pid_file_proc()
56 return fawkes_pid_file;
58 #endif // HAVE_LIBDAEMON 65 mode_t old_umask = umask(0);
71 if ((pid = daemon_fork()) < 0) {
78 if ((ret = daemon_retval_wait(20)) < 0) {
79 daemon_log(LOG_ERR,
"Could not recieve return value from daemon process.");
84 daemon_log(LOG_ERR,
"*** Daemon startup failed, see syslog for details. ***");
86 case 1: daemon_log(LOG_ERR,
"Daemon failed to close file descriptors");
break;
87 case 2: daemon_log(LOG_ERR,
"Daemon failed to create PID file");
break;
95 # ifdef DAEMON_CLOSE_ALL_AVAILABLE 96 if (daemon_close_all(-1) < 0) {
97 daemon_log(LOG_ERR,
"Failed to close all file descriptors: %s", strerror(errno));
99 daemon_retval_send(1);
105 if (daemon_pid_file_create() < 0) {
106 printf(
"Could not create PID file (%s).", strerror(errno));
107 daemon_log(LOG_ERR,
"Could not create PID file (%s).", strerror(errno));
110 daemon_retval_send(2);
115 daemon_retval_send(0);
117 daemon_log(LOG_INFO,
"Sucessfully started");
123 throw Exception(
"Daemonizing support is not available.\n" 124 "(libdaemon[-devel] was not available at compile time)\n");
129 init(
const char *pidfile,
const char *progname)
131 #ifdef HAVE_LIBDAEMON 133 daemon_pid_file_ident = daemon_log_ident = daemon_ident_from_argv0((
char *)progname);
134 if (pidfile != NULL) {
135 fawkes_pid_file = pidfile;
136 daemon_pid_file_proc = fawkes_daemon_pid_file_proc;
139 throw Exception(
"Daemonizing support is not available.\n" 140 "(libdaemon[-devel] was not available at compile time)\n");
147 #ifdef HAVE_LIBDAEMON 151 if ((pid = daemon_pid_file_is_running()) >= 0) {
152 daemon_log(LOG_ERR,
"Daemon already running on (PID %u)", pid);
153 throw Exception(
"Daemon already running on (PID %u)", pid);
159 throw Exception(
"Failed to daemonize");
168 throw Exception(
"Daemonizing support is not available.\n" 169 "(libdaemon[-devel] was not available at compile time)\n");
176 #ifdef HAVE_LIBDAEMON 177 return (daemon_pid_file_is_running() >= 0);
179 throw Exception(
"Daemonizing support is not available.\n" 180 "(libdaemon[-devel] was not available at compile time)\n");
187 #ifdef HAVE_LIBDAEMON 192 if ((pid = daemon_pid_file_is_running()) < 0) {
193 daemon_log(LOG_WARNING,
"Fawkes daemon not running.");
197 if ((ret = daemon_pid_file_kill_wait(SIGINT, 5)) < 0) {
198 daemon_log(LOG_WARNING,
"Failed to kill daemon");
201 daemon_pid_file_remove();
203 throw Exception(
"Daemonizing support is not available.\n" 204 "(libdaemon[-devel] was not available at compile time)\n");
211 #ifdef HAVE_LIBDAEMON 212 daemon_retval_send(-1);
213 daemon_retval_done();
214 daemon_pid_file_remove();
216 throw Exception(
"Daemonizing support is not available.\n" 217 "(libdaemon[-devel] was not available at compile time)\n");
Fawkes library namespace.