24 #include <baseapp/daemonize.h> 26 #include <utils/system/argparser.h> 29 #include <sys/types.h> 35 # include <libdaemon/dfork.h> 36 # include <libdaemon/dlog.h> 37 # include <libdaemon/dpid.h> 38 # include <sys/stat.h> 39 # include <sys/wait.h> 52 const char *fawkes_pid_file;
58 fawkes_daemon_pid_file_proc()
60 return fawkes_pid_file;
62 #endif // HAVE_LIBDAEMON 70 mode_t old_umask = umask(0);
76 if ((pid = daemon_fork()) < 0) {
83 if ((ret = daemon_retval_wait(20)) < 0) {
84 daemon_log(LOG_ERR,
"Could not recieve return value from daemon process.");
89 daemon_log(LOG_ERR,
"*** Daemon startup failed, see syslog for details. ***");
92 daemon_log(LOG_ERR,
"Daemon failed to close file descriptors");
95 daemon_log(LOG_ERR,
"Daemon failed to create PID file");
104 #ifdef DAEMON_CLOSE_ALL_AVAILABLE 105 if (daemon_close_all(-1) < 0) {
106 daemon_log(LOG_ERR,
"Failed to close all file descriptors: %s", strerror(errno));
108 daemon_retval_send(1);
114 if (daemon_pid_file_create() < 0) {
115 printf(
"Could not create PID file (%s).", strerror(errno));
116 daemon_log(LOG_ERR,
"Could not create PID file (%s).", strerror(errno));
119 daemon_retval_send(2);
124 daemon_retval_send(0);
126 daemon_log(LOG_INFO,
"Sucessfully started");
132 throw Exception(
"Daemonizing support is not available.\n" 133 "(libdaemon[-devel] was not available at compile time)\n");
139 init(
const char *pidfile,
const char *progname)
141 #ifdef HAVE_LIBDAEMON 143 daemon_pid_file_ident = daemon_log_ident =
144 daemon_ident_from_argv0((
char *)progname);
145 if ( pidfile != NULL ) {
146 fawkes_pid_file = pidfile;
147 daemon_pid_file_proc = fawkes_daemon_pid_file_proc;
150 throw Exception(
"Daemonizing support is not available.\n" 151 "(libdaemon[-devel] was not available at compile time)\n");
158 #ifdef HAVE_LIBDAEMON 162 if ((pid = daemon_pid_file_is_running()) >= 0) {
163 daemon_log(LOG_ERR,
"Daemon already running on (PID %u)", pid);
164 throw Exception(
"Daemon already running on (PID %u)", pid);
170 throw Exception(
"Failed to daemonize");
179 throw Exception(
"Daemonizing support is not available.\n" 180 "(libdaemon[-devel] was not available at compile time)\n");
187 #ifdef HAVE_LIBDAEMON 188 return (daemon_pid_file_is_running() >= 0);
190 throw Exception(
"Daemonizing support is not available.\n" 191 "(libdaemon[-devel] was not available at compile time)\n");
199 #ifdef HAVE_LIBDAEMON 204 if ((pid = daemon_pid_file_is_running()) < 0) {
205 daemon_log(LOG_WARNING,
"Fawkes daemon not running.");
209 if ((ret = daemon_pid_file_kill_wait(SIGINT, 5)) < 0) {
210 daemon_log(LOG_WARNING,
"Failed to kill daemon");
213 daemon_pid_file_remove();
215 throw Exception(
"Daemonizing support is not available.\n" 216 "(libdaemon[-devel] was not available at compile time)\n");
224 #ifdef HAVE_LIBDAEMON 225 daemon_retval_send(-1);
226 daemon_retval_done();
227 daemon_pid_file_remove();
229 throw Exception(
"Daemonizing support is not available.\n" 230 "(libdaemon[-devel] was not available at compile time)\n");
Fawkes library namespace.