Browse Source

Provide an option to daemonise ckpool

master
Con Kolivas 10 years ago
parent
commit
1df924e73d
  1. 21
      src/ckpool.c
  2. 3
      src/ckpool.h

21
src/ckpool.c

@ -1201,6 +1201,7 @@ static void *watchdog(void *arg)
static struct option long_options[] = { static struct option long_options[] = {
{"standalone", no_argument, 0, 'A'}, {"standalone", no_argument, 0, 'A'},
{"config", required_argument, 0, 'c'}, {"config", required_argument, 0, 'c'},
{"daemonise", no_argument, 0, 'D'},
{"ckdb-name", required_argument, 0, 'd'}, {"ckdb-name", required_argument, 0, 'd'},
{"group", required_argument, 0, 'g'}, {"group", required_argument, 0, 'g'},
{"handover", no_argument, 0, 'H'}, {"handover", no_argument, 0, 'H'},
@ -1218,6 +1219,7 @@ static struct option long_options[] = {
#else #else
static struct option long_options[] = { static struct option long_options[] = {
{"config", required_argument, 0, 'c'}, {"config", required_argument, 0, 'c'},
{"daemonise", no_argument, 0, 'D'},
{"group", required_argument, 0, 'g'}, {"group", required_argument, 0, 'g'},
{"handover", no_argument, 0, 'H'}, {"handover", no_argument, 0, 'H'},
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
@ -1267,7 +1269,7 @@ int main(int argc, char **argv)
ckp.initial_args[ckp.args] = strdup(argv[ckp.args]); ckp.initial_args[ckp.args] = strdup(argv[ckp.args]);
ckp.initial_args[ckp.args] = NULL; ckp.initial_args[ckp.args] = NULL;
while ((c = getopt_long(argc, argv, "Ac:d:g:HhkLl:n:PpS:s:", long_options, &i)) != -1) { while ((c = getopt_long(argc, argv, "Ac:Dd:g:HhkLl:n:PpS:s:", long_options, &i)) != -1) {
switch (c) { switch (c) {
case 'A': case 'A':
ckp.standalone = true; ckp.standalone = true;
@ -1275,6 +1277,9 @@ int main(int argc, char **argv)
case 'c': case 'c':
ckp.config = optarg; ckp.config = optarg;
break; break;
case 'D':
ckp.daemon = true;
break;
case 'd': case 'd':
ckp.ckdb_name = optarg; ckp.ckdb_name = optarg;
break; break;
@ -1500,6 +1505,20 @@ int main(int argc, char **argv)
} }
} }
if (ckp.daemon) {
int fd;
if (fork())
exit(0);
setsid();
fd = open("/dev/null",O_RDWR, 0);
if (fd != -1) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
}
}
write_namepid(&ckp.main); write_namepid(&ckp.main);
open_process_sock(&ckp, &ckp.main, &ckp.main.us); open_process_sock(&ckp, &ckp.main, &ckp.main.us);
launch_logger(&ckp.main); launch_logger(&ckp.main);

3
src/ckpool.h

@ -141,6 +141,9 @@ struct ckpool_instance {
/* Are we running without ckdb */ /* Are we running without ckdb */
bool standalone; bool standalone;
/* Should we daemonise the ckpool process */
bool daemon;
/* Bitcoind data */ /* Bitcoind data */
int btcds; int btcds;
char **btcdurl; char **btcdurl;

Loading…
Cancel
Save