#include #include #include #include #include #include #include "confparser.h" #include "log_trace.h" #include "rmps.h" static void usage(char *argv) { log_trace( ERROR, "Usage:\n%s start|stop|restart [--daemonize=yes|no]\n", argv ); } int main(int argc, char *argv[]) { int fork_flag = 1, task; if (argc < 2 || argc > 3) { usage(argv[0]); exit(EXIT_FAILURE); } if (!strcmp(argv[1], "start")) task = 1; else if (!strcmp(argv[1], "stop")) task = 2; else if (!strcmp(argv[1], "restart")) task = 3; else { usage(argv[0]); exit(EXIT_FAILURE); } if (argc == 3) { if (!strcmp("--daemonize=yes", argv[2])); else if (!strcmp("--daemonize=no", argv[2])) fork_flag = 0; else { usage(argv[0]); exit(EXIT_FAILURE); } } if (confparse() != 0) { log_trace(ERROR, "Failed to parse the conf!"); exit(EXIT_FAILURE); } log_trace(VERBOSE, "Conf parser finished successfully"); //confexport(); if (task == 2 || task == 3) { char buf[10]; int pid; FILE *fp; if (task == 2) log_trace(VERBOSE, "We got a stop signal!"); else if (task == 3) log_trace(VERBOSE, "We got a restart signal!"); fp = fopen(conf.rmps.pidfile, "r"); switch (errno) { case EEXIST: if (!fgets(buf, 10, fp)) { log_trace(ERROR, "Failed to read %s!", conf.rmps.pidfile); exit(EXIT_FAILURE); } pid = strtol(buf, NULL, 10); kill(pid, SIGTERM); //waitpid(TODO); break; case EACCES: log_trace(ERROR, "Permission denied to read PID. Exiting!"); exit(EXIT_FAILURE); case ENOENT: if (task == 2) exit(EXIT_FAILURE); break; default: log_trace( ERROR, "Unhandled errno while opening PID: %d. Exiting!", errno ); exit(EXIT_FAILURE); } } if (task == 1 || task == 3) { launch_rmps(&conf, fork_flag); } return 0; }