96 lines
1.8 KiB
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]", 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;
|
|
}
|