start the ctdb protocol
*/
int ctdb_start(struct ctdb_context *ctdb);
-int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork);
+int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork, bool use_syslog);
/*
attach to a ctdb database
/*
start the protocol going as a daemon
*/
-int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork)
+int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork, bool use_syslog)
{
int res, ret = -1;
struct fd_event *fde;
block_signal(SIGPIPE);
ctdbd_pid = getpid();
+
+
DEBUG(DEBUG_ERR, ("Starting CTDBD as pid : %u\n", ctdbd_pid));
if (ctdb->do_setsched) {
DEBUG(DEBUG_CRIT,("Failed to set up signal handler for SIGCHLD\n"));
exit(1);
}
+
+ if (use_syslog) {
+ if (start_syslog_daemon(ctdb)) {
+ DEBUG(DEBUG_CRIT, ("Failed to start syslog daemon\n"));
+ exit(10);
+ }
+ }
+
/* go into a wait loop to allow other nodes to complete */
event_loop_wait(ctdb->ev);
#include "system/time.h"
#include "system/filesys.h"
+static bool syslogd_is_started;
struct syslog_message {
uint32_t level;
return -1;
}
+ syslogd_is_started = 1;
+
if (child != 0) {
return 0;
}
msg->len = strlen(s);
strcpy(msg->message, s);
- syslog_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (syslog_fd == -1) {
- printf("Failed to create syslog socket\n");
- free(s);
- free(msg);
- return;
- }
+ if (syslogd_is_started == 0) {
+ syslog(msg->level, "%s", msg->message);
+ } else {
+ syslog_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if (syslog_fd == -1) {
+ printf("Failed to create syslog socket\n");
+ free(s);
+ free(msg);
+ return;
+ }
- syslog_sin.sin_family = AF_INET;
- syslog_sin.sin_port = htons(CTDB_PORT);
- syslog_sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ syslog_sin.sin_family = AF_INET;
+ syslog_sin.sin_port = htons(CTDB_PORT);
+ syslog_sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+
+ ret = sendto(syslog_fd, msg, len, 0, &syslog_sin, sizeof(syslog_sin));
+ /* no point in checking here since we cant log an error */
- ret = sendto(syslog_fd, msg, len, 0, &syslog_sin, sizeof(syslog_sin));
- /* no point in checking here since we cant log an error */
+ close(syslog_fd);
+ }
- close(syslog_fd);
free(s);
free(msg);
}
ctdb = ctdb_cmdline_init(ev);
- if (options.use_syslog) {
- if (start_syslog_daemon(ctdb)) {
- printf("Failed to start syslog daemon\n");
- exit(10);
- }
- }
-
ctdb->start_as_disabled = options.start_as_disabled;
ctdb->start_as_stopped = options.start_as_stopped;
}
/* start the protocol running (as a child) */
- return ctdb_start_daemon(ctdb, interactive?False:True);
+ return ctdb_start_daemon(ctdb, interactive?False:True, options.use_syslog);
}