[CRIU] [PATCH] service: rotate log by SIGHUP
Vladimir Davydov
vdavydov at parallels.com
Mon Feb 10 22:59:44 PST 2014
Sorry for butting in, but why don't you use logrotate(8)?
On 02/11/2014 10:41 AM, Ruslan Kuprieiev wrote:
> Many existing daemons rotate logs by SIGHUP, so lets do the same with our service.
>
> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
> ---
> cr-service.c | 30 ++++++++++++++++++++++++++----
> 1 file changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/cr-service.c b/cr-service.c
> index 26dd3e2..49454e7 100644
> --- a/cr-service.c
> +++ b/cr-service.c
> @@ -489,12 +489,21 @@ static void reap_worker(int signo)
> }
> }
>
> -static int setup_sigchld_handler()
> +static void rotate_log(int signo)
> +{
> + pr_info("Rotating log.\n");
> +
> + if (log_rotate())
> + exit(1);
> +}
> +
> +static int setup_signal_handlers()
> {
> struct sigaction action;
>
> sigemptyset(&action.sa_mask);
> sigaddset(&action.sa_mask, SIGCHLD);
> + sigaddset(&action.sa_mask, SIGHUP);
> action.sa_handler = reap_worker;
> action.sa_flags = SA_RESTART;
>
> @@ -503,15 +512,23 @@ static int setup_sigchld_handler()
> return -1;
> }
>
> + action.sa_handler = rotate_log;
> +
> + if (sigaction(SIGHUP, &action, NULL)) {
> + pr_perror("Can't setup SIGUSR1 handler");
> + return -1;
> + }
> +
> return 0;
> }
>
> -static int restore_sigchld_handler()
> +static int restore_signal_handlers()
> {
> struct sigaction action;
>
> sigemptyset(&action.sa_mask);
> sigaddset(&action.sa_mask, SIGCHLD);
> + sigaddset(&action.sa_mask, SIGHUP);
> action.sa_handler = SIG_DFL;
> action.sa_flags = SA_RESTART;
>
> @@ -520,6 +537,11 @@ static int restore_sigchld_handler()
> return -1;
> }
>
> + if (sigaction(SIGHUP, &action, NULL)) {
> + pr_perror("Can't restore SIGHUP handler");
> + return -1;
> + }
> +
> return 0;
> }
>
> @@ -596,7 +618,7 @@ int cr_service(bool daemon_mode)
> }
> }
>
> - if (setup_sigchld_handler())
> + if (setup_signal_handlers())
> goto err;
>
> while (1) {
> @@ -615,7 +637,7 @@ int cr_service(bool daemon_mode)
> if (child_pid == 0) {
> int ret;
>
> - if (restore_sigchld_handler())
> + if (restore_signal_handlers())
> exit(1);
>
> close(server_fd);
More information about the CRIU
mailing list