[CRIU] [PATCH] service: rotate log by SIGHUP
Vladimir Davydov
vdavydov at parallels.com
Mon Feb 10 23:28:25 PST 2014
On 02/11/2014 11:11 AM, Ruslan Kuprieiev wrote:
> Because we wan't service to work non-stop.
> And, as far as I know, by just using logrotate we will need to restart
> service.
Not necessarily, you can specify what should be done after rotate
(`postrotate'), e.g. send a signal to your service so that it could
reopen the logfile. However, I guess that `copytruncate' would be enough
in your case.
>
> On 11.02.2014 10:59, Vladimir Davydov wrote:
>> 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