mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 04:33:05 +00:00
reopen log file when recv signal HUP
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user