Ensure the daemon doesn't get killed by logrotate

refs #8050
This commit is contained in:
Alexander A. Klimov 2020-10-14 14:02:44 +02:00
parent e9b8fc234b
commit d3f6a97a7e
1 changed files with 5 additions and 0 deletions

View File

@ -367,6 +367,10 @@ static void UmbrellaSignalHandler(int num, siginfo_t *info, void*)
static void WorkerSignalHandler(int num, siginfo_t *info, void*)
{
switch (num) {
case SIGUSR1:
// Catches SIGUSR1 as long as the actual handler (logrotate)
// has not been installed not to let SIGUSR1 terminate the process
break;
case SIGUSR2:
if (info->si_pid == l_UmbrellaPid) {
// The umbrella process allowed us to continue working beyond config validation
@ -459,6 +463,7 @@ static pid_t StartUnixWorker(const std::vector<std::string>& configs, bool close
sa.sa_sigaction = &WorkerSignalHandler;
sa.sa_flags = SA_RESTART | SA_SIGINFO;
(void)sigaction(SIGUSR1, &sa, nullptr);
(void)sigaction(SIGUSR2, &sa, nullptr);
(void)sigaction(SIGINT, &sa, nullptr);
(void)sigaction(SIGTERM, &sa, nullptr);