From 41e37f2220475bafb4bf274f5800dd1734581a10 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Sat, 19 Jun 2010 01:39:07 +0200 Subject: [PATCH] Add options to daemonize FCB and FRM_DUMMY --- fres/cbroker/fcb.c | 19 +++++++++++++++++-- fres/resmng/frm_generic.c | 1 + resources/dummy/frm_dummy.c | 15 +++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/fres/cbroker/fcb.c b/fres/cbroker/fcb.c index cb9e9a2..8cebbf6 100644 --- a/fres/cbroker/fcb.c +++ b/fres/cbroker/fcb.c @@ -53,6 +53,7 @@ * * */ +#include #include #include #include @@ -78,6 +79,8 @@ UL_LOG_CUST(ulogd_fcb); ul_log_domain_t ulogd_fcb = {UL_LOGL_MSG, "main"}; UL_LOGREG_SINGLE_DOMAIN_INIT_FUNCTION(init_ulogd_fcb, ulogd_fcb); +bool opt_daemon = false; +char *opt_pidfile = NULL; fosa_abs_time_t start_time; @@ -956,7 +959,8 @@ void peer_dead_callback(const forb_orb peer_orb, const char *orb_id) } static struct option long_opts[] = { - { "loglevel", 1, 0, 'l' }, + { "daemon", optional_argument, NULL, 'd' }, + { "loglevel", required_argument, NULL, 'l' }, { 0, 0, 0, 0} }; @@ -964,6 +968,7 @@ static void usage(void) { printf("usage: fcb [ options ]\n"); + printf(" -d, --daemon [pid-file] go to background after FORB initialization\n"); printf(" -l, --loglevel |=,...\n"); } @@ -992,7 +997,7 @@ int main(int argc, char *argv[]) }; int opt; - while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) { + while ((opt = getopt_long(argc, argv, "d::l:", &long_opts[0], NULL)) != EOF) { switch (opt) { case 'l': if (*optarg == '?') { @@ -1006,6 +1011,10 @@ int main(int argc, char *argv[]) error(1, EINVAL, "Error parsing -l argument at char %d\n", ret); } break; + case 'd': + opt_daemon = true; + opt_pidfile = optarg; + break; case 'h': /*default:*/ usage(); @@ -1015,6 +1024,9 @@ int main(int argc, char *argv[]) fosa_clock_get_time(CLOCK_REALTIME, &start_time); + if (opt_daemon) + forb_daemon_prepare(opt_pidfile); + orb = forb_init(&argc, &argv, &attr); if (!orb) error(1, errno, "FORB initialization failed"); @@ -1041,6 +1053,9 @@ int main(int argc, char *argv[]) if (ret) error(1, errno, "forb_register_reference() failed"); ul_logmsg("Waiting for requests\n"); + if (opt_daemon) + forb_daemon_ready(); + ret = forb_executor_run(&executor); if (ret) error(1, errno, "forb_executor_run failed"); diff --git a/fres/resmng/frm_generic.c b/fres/resmng/frm_generic.c index dc914a9..417598a 100644 --- a/fres/resmng/frm_generic.c +++ b/fres/resmng/frm_generic.c @@ -448,6 +448,7 @@ int frm_register_and_run(forb_orb orb, const struct fres_res_manager *desc) /* Start request processing */ ul_logmsg("Waiting for requests\n"); + forb_daemon_ready(); ret = forb_executor_run(&executor); if (ret) goto err_release_frm; diff --git a/resources/dummy/frm_dummy.c b/resources/dummy/frm_dummy.c index 082564c..bd77175 100644 --- a/resources/dummy/frm_dummy.c +++ b/resources/dummy/frm_dummy.c @@ -69,6 +69,8 @@ #include "dummy_config.h" bool opt_accept_all = false; +bool opt_daemon = false; +char *opt_pidfile = NULL; struct dummy_data { int some_data; @@ -159,6 +161,7 @@ static const struct fres_res_manager frm = { }; static struct option long_opts[] = { + { "daemon", optional_argument, NULL, 'd' }, { "loglevel", 1, 0, 'l' }, { "accept-all", 0, 0, 'a' }, { "help", 0, 0, 'h' }, @@ -169,9 +172,10 @@ static void usage(void) { printf("usage: frm_dummy [ options ]\n"); - printf(" -l, --loglevel |=,...\n"); printf(" -a, --accept-all Accepts all contracts\n"); + printf(" -d, --daemon [pid-file] go to background after FORB initialization\n"); printf(" -h, --help Display this help\n"); + printf(" -l, --loglevel |=,...\n"); } int main(int argc, char *argv[]) @@ -181,10 +185,14 @@ int main(int argc, char *argv[]) forb_init_attr_t attr = { .orb_id = "org.frescor.frm.dummy" }; int opt; - while ((opt = getopt_long(argc, argv, "al:h", &long_opts[0], NULL)) != EOF) { + while ((opt = getopt_long(argc, argv, "ad::l:h", &long_opts[0], NULL)) != EOF) { switch (opt) { case 'a': opt_accept_all = true; + case 'd': + opt_daemon = true; + opt_pidfile = optarg; + break; case 'l': ul_log_domain_arg2levels(optarg); break; @@ -195,6 +203,9 @@ int main(int argc, char *argv[]) } } + if (opt_daemon) + forb_daemon_prepare(opt_pidfile); + orb = forb_init(&argc, &argv, &attr); if (!orb) error(1, errno, "forb_init"); -- 2.39.2