reopen log file when recv signal HUP

This commit is contained in:
Cloud Wu
2016-06-12 13:40:23 +08:00
parent 0edb839c95
commit ea9bc53261
2 changed files with 58 additions and 6 deletions

View File

@@ -16,6 +16,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
struct monitor {
int count;
@@ -32,6 +33,15 @@ struct worker_parm {
int weight;
};
static int SIG = 0;
static void
handle_hup(int signal) {
if (signal == SIGHUP) {
SIG = 1;
}
}
#define CHECK_ABORT if (skynet_context_total()==0) break;
static void
@@ -100,6 +110,21 @@ thread_monitor(void *p) {
return NULL;
}
static void
signal_hup() {
// make log file reopen
struct skynet_message smsg;
smsg.source = 0;
smsg.session = 0;
smsg.data = NULL;
smsg.sz = (size_t)PTYPE_SYSTEM << MESSAGE_TYPE_SHIFT;
uint32_t logger = skynet_handle_findname("logger");
if (logger) {
skynet_context_push(logger, &smsg);
}
}
static void *
thread_timer(void *p) {
struct monitor * m = p;
@@ -109,6 +134,10 @@ thread_timer(void *p) {
CHECK_ABORT
wakeup(m,m->count-1);
usleep(2500);
if (SIG) {
signal_hup();
SIG = 0;
}
}
// wakeup socket thread
skynet_socket_exit();
@@ -216,6 +245,13 @@ bootstrap(struct skynet_context * logger, const char * cmdline) {
void
skynet_start(struct skynet_config * config) {
// register SIGHUP for log file reopen
struct sigaction sa;
sa.sa_handler = &handle_hup;
sa.sa_flags = SA_RESTART;
sigfillset(&sa.sa_mask);
sigaction(SIGHUP, &sa, NULL);
if (config->daemon) {
if (daemon_init(config->daemon)) {
exit(1);