#include #include #include #include #include #include #include "confparser.h" #include "log.h" #include "rmps.h" static void usage(char *argv) { log(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])) fork_flag = 1; else if (!strcmp("--daemonize=no", argv[2])) fork_flag = 0; else { usage(argv[0]); exit(EXIT_FAILURE); } } if (confparse() != 0) { log(ERROR, "Failed to parse the conf!"); exit(EXIT_FAILURE); } log(VERBOSE, "Conf parser finished successfully"); //confexport(); if (task == 2 || task == 3) { char buf[10]; int pid; FILE *fp; if (task == 2) log(VERBOSE, "We got a stop signal!"); else if (task == 3) log(VERBOSE, "We got a restart signal!"); fp = fopen(conf.rmps.pidfile, "r"); switch (errno) { case EEXIST: if (!fgets(buf, 10, fp)) { log(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(ERROR, "Permission denied to read PID. Exiting!"); exit(EXIT_FAILURE); case ENOENT: if (task == 2) exit(EXIT_FAILURE); break; default: log(ERROR, "Failed to open PID file (errno: %d. Exiting!", errno); exit(EXIT_FAILURE); } } if (task == 1 || task == 3) launch_rmps(&conf, fork_flag); return 0; }