From 630b24112fbd87c0dd020795a221fefc8840630a Mon Sep 17 00:00:00 2001 From: YoruStar <524413304@qq.com> Date: Wed, 29 Mar 2023 15:58:58 +0800 Subject: [PATCH] Support reloading with SIGURG in addition to SIGHUP And use that with the systemd unit to handle the reload. Conflict:NA Reference:https://github.com/cronie-crond/cronie/commit/630b24112fbd87c0dd020795a221fefc8840630a --- contrib/cronie.systemd | 2 +- src/cron.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/contrib/cronie.systemd b/contrib/cronie.systemd index 19f2a98..8317367 100644 --- a/contrib/cronie.systemd +++ b/contrib/cronie.systemd @@ -5,7 +5,7 @@ After=auditd.service nss-user-lookup.target systemd-user-sessions.service time-s [Service] EnvironmentFile=/etc/sysconfig/crond ExecStart=/usr/sbin/crond -n $CRONDARGS -ExecReload=/bin/kill -HUP $MAINPID +ExecReload=/bin/kill -URG $MAINPID KillMode=process Restart=on-failure RestartSec=30s diff --git a/src/cron.c b/src/cron.c index 1ff19e3..e4e119d 100644 --- a/src/cron.c +++ b/src/cron.c @@ -66,10 +66,11 @@ set_time(int), cron_sleep(int, cron_db *), sigchld_handler(int), sighup_handler(int ATTRIBUTE_UNUSED), +sigurg_handler(int ATTRIBUTE_UNUSED), sigchld_reaper(void), sigintterm_handler(int ATTRIBUTE_UNUSED), parse_args(int c, char *v[]); -static volatile sig_atomic_t got_sighup, got_sigchld, got_sigintterm; +static volatile sig_atomic_t got_sighup, got_sigchld, got_sigintterm, got_sigurg; static int timeRunning, virtualTime, clockTime; static long GMToff; static int DisableInotify; @@ -151,8 +152,9 @@ void set_cron_watched(int fd) { #endif static void handle_signals(cron_db * database) { - if (got_sighup) { + if (got_sighup || got_sigurg) { got_sighup = 0; + got_sigurg = 0; #if defined WITH_INOTIFY /* watches must be reinstated on reload */ if (inotify_enabled && (EnableClustering != 1)) { @@ -243,6 +245,8 @@ int main(int argc, char *argv[]) { sact.sa_handler = sigintterm_handler; (void) sigaction(SIGINT, &sact, NULL); (void) sigaction(SIGTERM, &sact, NULL); + sact.sa_handler = sigurg_handler; + (void) sigaction(SIGURG, &sact, NULL); acquire_daemonlock(0); set_cron_uid(); @@ -664,6 +668,10 @@ static void sigintterm_handler(int x ATTRIBUTE_UNUSED) { got_sigintterm = 1; } +static void sigurg_handler(int x ATTRIBUTE_UNUSED) { + got_sigurg = 1; +} + static void sigchld_reaper(void) { WAIT_T waiter; PID_T pid; -- 2.33.0