1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

support log rotate signal SIGUSR1. 3.0.8

This commit is contained in:
winlin 2016-12-08 18:23:22 +08:00
parent 9e9cad1826
commit 2955b1fd2d
9 changed files with 61 additions and 23 deletions

View file

@ -127,6 +127,19 @@ int SrsFastLog::initialize()
return ret;
}
void SrsFastLog::reopen()
{
if (fd > 0) {
::close(fd);
}
if (!log_to_file_tank) {
return;
}
open_log_file();
}
void SrsFastLog::verbose(const char* tag, int context_id, const char* fmt, ...)
{
if (_level > SrsLogLevel::Verbose) {

View file

@ -82,6 +82,7 @@ public:
virtual ~SrsFastLog();
public:
virtual int initialize();
virtual void reopen();
virtual void verbose(const char* tag, int context_id, const char* fmt, ...);
virtual void info(const char* tag, int context_id, const char* fmt, ...);
virtual void trace(const char* tag, int context_id, const char* fmt, ...);

View file

@ -408,10 +408,10 @@ int SrsSignalManager::initialize()
int SrsSignalManager::start()
{
/**
* Note that if multiple processes are used (see below),
* the signal pipe should be initialized after the fork(2) call
* so that each process has its own private pipe.
*/
* Note that if multiple processes are used (see below),
* the signal pipe should be initialized after the fork(2) call
* so that each process has its own private pipe.
*/
struct sigaction sa;
/* Install sig_catcher() as a signal handler */
@ -433,15 +433,10 @@ int SrsSignalManager::start()
sa.sa_handler = SrsSignalManager::sig_catcher;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SRS_SIGNAL_DISPOSE, &sa, NULL);
sigaction(SRS_SIGNAL_REOPEN_LOG, &sa, NULL);
sa.sa_handler = SrsSignalManager::sig_catcher;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SRS_SIGNAL_PERSISTENCE_CONFIG, &sa, NULL);
srs_trace("signal installed, reload=%d, dispose=%d, persistence=%d, grace_quit=%d",
SRS_SIGNAL_RELOAD, SRS_SIGNAL_DISPOSE, SRS_SIGNAL_PERSISTENCE_CONFIG, SRS_SIGNAL_GRACEFULLY_QUIT);
srs_trace("signal installed, reload=%d, reopen=%d, grace_quit=%d",
SRS_SIGNAL_RELOAD, SRS_SIGNAL_REOPEN_LOG, SRS_SIGNAL_GRACEFULLY_QUIT);
return pthread->start();
}
@ -906,19 +901,36 @@ int SrsServer::cycle()
return ret;
}
void SrsServer::on_signal(int signo)
{
{
if (signo == SRS_SIGNAL_RELOAD) {
signal_reload = true;
return;
}
#ifndef SRS_AUTO_GPERF_MC
if (signo == SRS_SIGNAL_REOPEN_LOG) {
_srs_log->reopen();
srs_warn("reopen log file");
return;
}
#endif
#ifdef SRS_AUTO_GPERF_MC
if (signo == SRS_SIGNAL_REOPEN_LOG) {
signal_gmc_stop = true;
srs_warn("for gmc, the SIGUSR1 used as SIGINT");
return;
}
#endif
if (signo == SRS_SIGNAL_PERSISTENCE_CONFIG) {
signal_persistence_config = true;
return;
}
if (signo == SIGINT || signo == SRS_SIGNAL_DISPOSE) {
if (signo == SIGINT) {
#ifdef SRS_AUTO_GPERF_MC
srs_trace("gmc is on, main cycle will terminate normally.");
signal_gmc_stop = true;

View file

@ -325,10 +325,10 @@ public:
* whatever, we will got the signo like the orignal signal(int signo) handler.
* @param signo the signal number from user, where:
* SRS_SIGNAL_GRACEFULLY_QUIT, the SIGTERM, dispose then quit.
* SRS_SIGNAL_DISPOSE, the SIGUSR2, dispose for gmc.
* SRS_SIGNAL_PERSISTENCE_CONFIG, the SIGUSR1, persistence config to file.
* SRS_SIGNAL_REOPEN_LOG, the SIGUSR1, reopen the log file.
* SRS_SIGNAL_RELOAD, the SIGHUP, reload the config.
* @remark, for SIGINT and SRS_SIGNAL_DISPOSE:
* SRS_SIGNAL_PERSISTENCE_CONFIG, application level signal, persistence config to file.
* @remark, for SIGINT:
* no gmc, directly exit.
* for gmc, set the variable signal_gmc_stop, the cycle will return and cleanup for gmc.
* @remark, maybe the HTTP RAW API will trigger the on_signal() also.