Add optional config file field: signal number to send (defaulted to HUP)

F.e. apache restarts less agressively  on USR1 then on HUP
This commit is contained in:
Andrey A. Chernov 1998-06-09 18:24:04 +00:00
parent 55e07e869f
commit dc55fe4c05
2 changed files with 43 additions and 10 deletions

View File

@ -1,7 +1,7 @@
.\" This file contains changes from the Open Software Foundation.
.\"
.\" from: @(#)newsyslog.8
.\" $Id: newsyslog.8,v 1.12 1998/05/10 18:41:16 hoek Exp $
.\" $Id: newsyslog.8,v 1.13 1998/05/10 19:04:05 hoek Exp $
.\"
.\" Copyright 1988, 1989 by the Massachusetts Institute of Technology
.\"
@ -120,9 +120,15 @@ field is specified.
.It Ar path_to_pid_file
This optional field specifies
the file name to read to find the daemon process id. If this
field is present, a SIGHUP is sent the process id contained in this
field is present, a
.Ar signal_number
is sent the process id contained in this
file. This field must start with "/" in order to be recognized
properly.
.It Ar signal_number
This optional field specifies
the signal number will be sent to the daemon process. By default
a SIGHUP will be sent.
.El
.Sh OPTIONS
The following options can be used with newsyslog:

View File

@ -27,7 +27,7 @@ provided "as is" without express or implied warranty.
#ifndef lint
static const char rcsid[] =
"$Id: newsyslog.c,v 1.18 1998/05/10 19:04:06 hoek Exp $";
"$Id: newsyslog.c,v 1.19 1998/05/10 21:13:29 hoek Exp $";
#endif /* not lint */
#ifndef CONF
@ -83,6 +83,7 @@ struct conf_entry {
int hours; /* Hours between log trimming */
int permissions; /* File permissions on the log */
int flags; /* Flags (CE_COMPACT & CE_BINARY) */
int sig; /* Signal to send */
struct conf_entry *next; /* Linked list pointer */
};
@ -108,7 +109,7 @@ static char *missing_field(char *p,char *errline);
static void do_entry(struct conf_entry *ent);
static void PRS(int argc,char **argv);
static void usage();
static void dotrim(char *log,char *pid_file,int numdays,int falgs,int perm, int owner_uid,int group_gid);
static void dotrim(char *log,char *pid_file,int numdays,int falgs,int perm,int owner_uid,int group_gid,int sig);
static int log_trim(char *log);
static void compress_log(char *log);
static int sizefile(char *file);
@ -181,7 +182,7 @@ static void do_entry(ent)
pid_file = NULL;
}
dotrim(ent->log, pid_file, ent->numlogs,
ent->flags, ent->permissions, ent->uid, ent->gid);
ent->flags, ent->permissions, ent->uid, ent->gid, ent->sig);
} else {
if (verbose)
printf("--> skipping\n");
@ -374,15 +375,40 @@ static struct conf_entry *parse_file()
q = NULL;
else {
q = parse = sob(++parse); /* Optional field */
*(parse = son(parse)) = '\0';
parse = son(parse);
if (!*parse)
eol = 1;
*parse = '\0';
}
working->pid_file = NULL;
if (q && *q) {
if (*q == '/')
working->pid_file = strdup(q);
else if (isdigit(*q))
goto got_sig;
else
errx(1, "illegal pid file in config file:\n%s", q);
errx(1, "illegal pid file or signal number in config file:\n%s", errline);
}
if (eol)
q = NULL;
else {
q = parse = sob(++parse); /* Optional field */
*(parse = son(parse)) = '\0';
}
working->sig = SIGHUP;
if (q && *q) {
if (isdigit(*q)) {
got_sig:
working->sig = atoi(q);
} else {
err_sig:
errx(1, "illegal signal number in config file:\n%s", errline);
}
if (working->sig < 1 || working->sig >= NSIG)
goto err_sig;
}
free(errline);
@ -401,7 +427,7 @@ static char *missing_field(p,errline)
return(p);
}
static void dotrim(log,pid_file,numdays,flags,perm,owner_uid,group_gid)
static void dotrim(log,pid_file,numdays,flags,perm,owner_uid,group_gid,sig)
char *log;
char *pid_file;
int numdays;
@ -409,6 +435,7 @@ static void dotrim(log,pid_file,numdays,flags,perm,owner_uid,group_gid)
int perm;
int owner_uid;
int group_gid;
int sig;
{
char file1 [MAXPATHLEN+1], file2 [MAXPATHLEN+1];
char zfile1[MAXPATHLEN+1], zfile2[MAXPATHLEN+1];
@ -504,8 +531,8 @@ static void dotrim(log,pid_file,numdays,flags,perm,owner_uid,group_gid)
if (pid) {
if (noaction) {
notified = 1;
printf("kill -HUP %d\n", (int)pid);
} else if (kill(pid,SIGHUP))
printf("kill -%d %d\n", sig, (int)pid);
} else if (kill(pid,sig))
warn("can't notify daemon, pid %d", (int)pid);
else {
notified = 1;