daemon: Add support for log file rotation when SIGUSR1 is received.
This commit is contained in:
parent
b84c565329
commit
52e75bea3b
1 changed files with 28 additions and 0 deletions
|
@ -1637,6 +1637,31 @@ signal.signal(signal.SIGTERM, sighandler)
|
||||||
signal.signal(signal.SIGUSR1, sighandler)
|
signal.signal(signal.SIGUSR1, sighandler)
|
||||||
signal.signal(signal.SIGUSR2, sighandler)
|
signal.signal(signal.SIGUSR2, sighandler)
|
||||||
|
|
||||||
|
def logrotate(stdout, stderr, stdoutmode = 0644, stderrmode = 0644):
|
||||||
|
def reopen(fileno, filename, mode):
|
||||||
|
err = 0
|
||||||
|
fd = -1
|
||||||
|
try:
|
||||||
|
fd = os.open(filename,
|
||||||
|
os.O_WRONLY | os.O_CREAT | os.O_APPEND, mode)
|
||||||
|
os.dup2(fd, fileno)
|
||||||
|
except OSError as e:
|
||||||
|
err = e.errno
|
||||||
|
finally:
|
||||||
|
if fd >= 0:
|
||||||
|
os.close(fd)
|
||||||
|
return err
|
||||||
|
if stdout:
|
||||||
|
err = reopen(1, stdout, stdoutmode)
|
||||||
|
if stderr:
|
||||||
|
if stderr == stdout and not err:
|
||||||
|
try:
|
||||||
|
os.dup2(1, 2)
|
||||||
|
except OSError as e:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
reopen(2, stderr, stderrmode)
|
||||||
|
|
||||||
def getMergedConfig(filename):
|
def getMergedConfig(filename):
|
||||||
''' Return a configuration after merging config file and command-line
|
''' Return a configuration after merging config file and command-line
|
||||||
arguments.
|
arguments.
|
||||||
|
@ -1750,6 +1775,9 @@ def main():
|
||||||
stdout = cfg['logfile'], stderr = cfg['logfile'],
|
stdout = cfg['logfile'], stderr = cfg['logfile'],
|
||||||
pidfilename = cfg['pidfile'],
|
pidfilename = cfg['pidfile'],
|
||||||
defaultmaxfd = DEFAULT_MAXFD)
|
defaultmaxfd = DEFAULT_MAXFD)
|
||||||
|
signal.signal(signal.SIGUSR1, lambda signum, stackframe:
|
||||||
|
logrotate(stdout = cfg['logfile'],
|
||||||
|
stderr = cfg['logfile']))
|
||||||
|
|
||||||
banner()
|
banner()
|
||||||
if cfg['execfile']:
|
if cfg['execfile']:
|
||||||
|
|
Loading…
Add table
Reference in a new issue