pidfile support with `-P pidfile'

This commit is contained in:
Omar Polo 2021-04-28 12:45:22 +00:00
parent 2ef7f631db
commit 8e8b2e252c
3 changed files with 22 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2021-04-28 Omar Polo <op@omarpolo.com>
* gmid.c (main): pidfile support with `-P pidfile'
2021-04-27 Omar Polo <op@omarpolo.com>
* parse.y (servopt): added ``env'' option to define environment vars for CGI scripts

5
gmid.1
View File

@ -22,6 +22,7 @@
.Bk -words
.Op Fl fnv
.Op Fl c Ar config
.Op Fl P Ar pidfile
.Ek
.Nm
.Bk -words
@ -51,6 +52,10 @@ Specify the configuration file.
Stays and logs on the foreground.
.It Fl n
Check that the configuration is valid, but don't start the server.
.It Fl P Pa pidfile
Write
.Nm
pid to the given path.
.El
.Pp
If no configuration file is given,

17
gmid.c
View File

@ -328,7 +328,7 @@ static void
usage(const char *me)
{
fprintf(stderr,
"USAGE: %s [-fn] [-c config] | [-6h] [-d certs-dir] [-H host]\n"
"USAGE: %s [-fn] [-c config] [-P pidfile] | [-6h] [-d certs-dir] [-H host]\n"
" [-p port] [-x cgi] [dir]\n",
me);
}
@ -474,12 +474,12 @@ main(int argc, char **argv)
{
struct imsgbuf exibuf;
int ch, conftest = 0, configless = 0;
int old_ipv6, old_port;
const char *cgi = NULL;
int pidfd, old_ipv6, old_port;
const char *pidfile = NULL, *cgi = NULL;
init_config();
while ((ch = getopt(argc, argv, "6c:d:fH:hnp:vx:")) != -1) {
while ((ch = getopt(argc, argv, "6c:d:fH:hnP:p:vx:")) != -1) {
switch (ch) {
case '6':
conf.ipv6 = 1;
@ -512,6 +512,10 @@ main(int argc, char **argv)
conftest = 1;
break;
case 'P':
pidfile = optarg;
break;
case 'p':
conf.port = parse_portno(optarg);
configless = 1;
@ -576,6 +580,8 @@ main(int argc, char **argv)
return 0;
}
pidfd = write_pidfile(pidfile);
/* Linux seems to call the event handlers even when we're
* doing a sigwait. These dummy handlers are here to avoid
* being terminated on SIGHUP, SIGINT or SIGTERM. */
@ -644,5 +650,8 @@ main(int argc, char **argv)
imsg_compose(&logibuf, IMSG_QUIT, 0, 0, -1, NULL, 0);
imsg_flush(&logibuf);
if (pidfd != -1)
close(pidfd);
return 0;
}