Files
rmps/main.c

96 lines
1.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#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]));
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,
"Unhandled errno while opening PID: %d. Exiting!",
errno
);
exit(EXIT_FAILURE);
}
}
if (task == 1 || task == 3) {
launch_rmps(&conf, fork_flag);
}
return 0;
}