Quoting Natanael Copa (nc...@alpinelinux.org): > Add option to create a pidfile for lxc-start daemon. This is helpful > for init scripts and process monitors.
Why only when daemonizing? Someone could presumably first lxc-start by hand in the foreground, then another admin walks in and restarts the sysvinit lxc job? > Signed-off-by: Natanael Copa <nc...@alpinelinux.org> > --- > doc/lxc-start.sgml.in | 12 ++++++++++++ > src/lxc/arguments.h | 1 + > src/lxc/lxc_start.c | 24 ++++++++++++++++++++++++ > 3 files changed, 37 insertions(+) > > diff --git a/doc/lxc-start.sgml.in b/doc/lxc-start.sgml.in > index 2b6778f..bd875d6 100644 > --- a/doc/lxc-start.sgml.in > +++ b/doc/lxc-start.sgml.in > @@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > 02111-1307 USA > <arg choice="opt">-f <replaceable>config_file</replaceable></arg> > <arg choice="opt">-c <replaceable>console_file</replaceable></arg> > <arg choice="opt">-d</arg> > + <arg choice="opt">-p <replaceable>pid_file</replaceable></arg> > <arg choice="opt">-s KEY=VAL</arg> > <arg choice="opt">-C</arg> > <arg choice="opt">command</arg> > @@ -109,6 +110,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > 02111-1307 USA > > <varlistentry> > <term> > + <option>-p, --pidfile <replaceable>pid_file</replaceable></option> > + </term> > + <listitem> > + <para> > + Create a pidfile when running as daemon. > + </para> > + </listitem> > + </varlistentry> > + > + <varlistentry> > + <term> > <option>-f, --rcfile <replaceable>config_file</replaceable></option> > </term> > <listitem> > diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h > index 40f0d6c..789ccd9 100644 > --- a/src/lxc/arguments.h > +++ b/src/lxc/arguments.h > @@ -45,6 +45,7 @@ struct lxc_arguments { > int daemonize; > const char *rcfile; > const char *console; > + const char *pidfile; > > /* for lxc-checkpoint/restart */ > const char *statefile; > diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c > index 81a5774..a031ee1 100644 > --- a/src/lxc/lxc_start.c > +++ b/src/lxc/lxc_start.c > @@ -62,6 +62,7 @@ static int my_parser(struct lxc_arguments* args, int c, > char* arg) > case 'f': args->rcfile = arg; break; > case 'C': args->close_all_fds = 1; break; > case 's': return lxc_config_define_add(&defines, arg); > + case 'p': args->pidfile = arg; break; > } > return 0; > } > @@ -72,6 +73,7 @@ static const struct option my_longopts[] = { > {"define", required_argument, 0, 's'}, > {"console", required_argument, 0, 'c'}, > {"close-all-fds", no_argument, 0, 'C'}, > + {"pidfile", required_argument, 0, 'p'}, > LXC_COMMON_OPTIONS > }; > > @@ -85,6 +87,7 @@ lxc-start start COMMAND in specified container NAME\n\ > Options :\n\ > -n, --name=NAME NAME for name of the container\n\ > -d, --daemon daemonize the container\n\ > + -p, --pidfile=FILE Create pidfile when daemonized\n\ > -f, --rcfile=FILE Load configuration file FILE\n\ > -c, --console=FILE Set the file output for the container console\n\ > -C, --close-all-fds If any fds are inherited, close them\n\ > @@ -95,6 +98,7 @@ Options :\n\ > .parser = my_parser, > .checker = NULL, > .daemonize = 0, > + .pidfile = NULL, > }; > > int main(int argc, char *argv[]) > @@ -200,6 +204,7 @@ int main(int argc, char *argv[]) > } > > if (my_args.daemonize) { > + FILE *pid_fp; > /* do an early check for needed privs, since otherwise the > * user won't see the error */ > > @@ -208,10 +213,26 @@ int main(int argc, char *argv[]) > return err; > } > > + if (my_args.pidfile != NULL) { > + pid_fp = fopen(my_args.pidfile, "w"); > + if (pid_fp == NULL) { > + SYSERROR("failed to create '%s'", my_args.name); > + return err; > + } > + } > + > if (daemon(0, 0)) { > SYSERROR("failed to daemonize '%s'", my_args.name); > return err; > } > + > + if (my_args.pidfile != NULL) { > + if (fprintf(pid_fp, "%d\n", getpid()) < 0) { > + SYSERROR("failed to write '%s'", > my_args.pidfile); > + return err; > + } > + fclose(pid_fp); > + } > } > > if (my_args.close_all_fds) > @@ -230,6 +251,9 @@ int main(int argc, char *argv[]) > err = -1; > } > > + if (my_args.daemonize && my_args.pidfile) > + unlink(my_args.pidfile); > + > return err; > } > > -- > 1.8.0 > > > ------------------------------------------------------------------------------ > Monitor your physical, virtual and cloud infrastructure from a single > web console. Get in-depth insight into apps, servers, databases, vmware, > SAP, cloud infrastructure, etc. Download 30-day Free Trial. > Pricing starts from $795 for 25 servers or applications! > http://p.sf.net/sfu/zoho_dev2dev_nov > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel ------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel