正在显示
9 个修改的文件
包含
100 行增加
和
62 行删除
@@ -18,10 +18,11 @@ chunk_size 60000; | @@ -18,10 +18,11 @@ chunk_size 60000; | ||
18 | # if enabled ffmpeg, each stracoding stream will create a log file. | 18 | # if enabled ffmpeg, each stracoding stream will create a log file. |
19 | # default: ./objs/logs | 19 | # default: ./objs/logs |
20 | ff_log_dir ./objs/logs; | 20 | ff_log_dir ./objs/logs; |
21 | -# the log file for srs. | ||
22 | -# if not specified or empty, disable log to file, only print to console. | ||
23 | -# if speicfied, write log to file and print to console. | ||
24 | -# default: empty. | 21 | +# the log tank, console or file. |
22 | +# if console, print log to console. | ||
23 | +# if file, write log to file. requires srs_log_file if log to file. | ||
24 | +# default: console. | ||
25 | +srs_log_tank console; | ||
25 | srs_log_file ./objs/srs.log; | 26 | srs_log_file ./objs/srs.log; |
26 | # the max connections. | 27 | # the max connections. |
27 | # if exceed the max connections, server will drop the new connection. | 28 | # if exceed the max connections, server will drop the new connection. |
@@ -27,11 +27,11 @@ YELLOW="\\e[33m" | @@ -27,11 +27,11 @@ YELLOW="\\e[33m" | ||
27 | BLACK="\\e[0m" | 27 | BLACK="\\e[0m" |
28 | POS="\\e[60G" | 28 | POS="\\e[60G" |
29 | 29 | ||
30 | -ok_msg(){ | 30 | +ok_msg() { |
31 | echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" | 31 | echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" |
32 | } | 32 | } |
33 | 33 | ||
34 | -failed_msg(){ | 34 | +failed_msg() { |
35 | echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]" | 35 | echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]" |
36 | } | 36 | } |
37 | 37 | ||
@@ -43,14 +43,14 @@ failed_msg(){ | @@ -43,14 +43,14 @@ failed_msg(){ | ||
43 | # @set variable $error_msg if error. | 43 | # @set variable $error_msg if error. |
44 | # @set variable $srs_pid_file to pid file. | 44 | # @set variable $srs_pid_file to pid file. |
45 | load_process_info() { | 45 | load_process_info() { |
46 | + # get pid file | ||
46 | srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'` | 47 | srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'` |
47 | if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi | 48 | if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi |
49 | + # get abs path | ||
50 | + srs_pid_dir=`dirname $srs_pid_file` | ||
51 | + srs_pid_file=`(cd ${ROOT}; cd $srs_pid_dir; pwd)`/`basename $srs_pid_file` | ||
48 | 52 | ||
49 | - if [[ -f $srs_pid_file ]]; then | ||
50 | - srs_pid=`cat $srs_pid_file 2>/dev/null` | ||
51 | - else | ||
52 | - srs_pid=`cat ${ROOT}/$srs_pid_file 2>/dev/null` | ||
53 | - fi | 53 | + srs_pid=`cat $srs_pid_file 2>/dev/null` |
54 | ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi | 54 | ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi |
55 | 55 | ||
56 | ps -p ${srs_pid} >/dev/null 2>/dev/null | 56 | ps -p ${srs_pid} >/dev/null 2>/dev/null |
@@ -69,21 +69,24 @@ start() { | @@ -69,21 +69,24 @@ start() { | ||
69 | 69 | ||
70 | # get log file | 70 | # get log file |
71 | srs_log_file=`cat ${ROOT}/${CONFIG} |grep '^srs_log_file'| awk '{print $2}'| awk -F ';' '{print $1}'` | 71 | srs_log_file=`cat ${ROOT}/${CONFIG} |grep '^srs_log_file'| awk '{print $2}'| awk -F ';' '{print $1}'` |
72 | + if [[ -z $srs_log_file ]]; then srs_log_file=${DEFAULT_LOG_FILE}; fi | ||
73 | + # get abs path | ||
74 | + srs_log_dir=`dirname $srs_log_file` | ||
75 | + srs_log_file=`(cd ${ROOT}; cd $srs_log_dir; pwd)`/`basename $srs_log_file` | ||
72 | 76 | ||
73 | # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" | 77 | # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" |
74 | if [[ -z $srs_log_file ]]; then | 78 | if [[ -z $srs_log_file ]]; then |
75 | - (cd ${ROOT}; ${APP} -c ${CONFIG} >/dev/null 2>&1) | 79 | + (cd ${ROOT}; ${ROOT}/${APP} -c ${CONFIG} >/dev/null 2>&1) |
76 | else | 80 | else |
77 | - (cd ${ROOT}; ${APP} -c ${CONFIG} >> $srs_log_file 2>&1) | 81 | + (cd ${ROOT}; ${ROOT}/${APP} -c ${CONFIG} >> $srs_log_file 2>&1) |
78 | fi | 82 | fi |
79 | 83 | ||
80 | # check again after start server | 84 | # check again after start server |
81 | - sleep 1 | ||
82 | for ((i = 0; i < 5; i++)); do | 85 | for ((i = 0; i < 5; i++)); do |
83 | # sleep a little while, for srs may start then crash. | 86 | # sleep a little while, for srs may start then crash. |
84 | sleep 0.1 | 87 | sleep 0.1 |
85 | load_process_info | 88 | load_process_info |
86 | - ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "SRS start failed"; return $ret; fi | 89 | + ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "SRS start failed, see $srs_log_file"; return $ret; fi |
87 | done | 90 | done |
88 | 91 | ||
89 | # check whether started. | 92 | # check whether started. |
@@ -308,7 +308,7 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, std::vector<string>& arg | @@ -308,7 +308,7 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, std::vector<string>& arg | ||
308 | srs_error("line %d: unexpected end of file, expecting ; or \"}\"", buffer->line); | 308 | srs_error("line %d: unexpected end of file, expecting ; or \"}\"", buffer->line); |
309 | return ERROR_SYSTEM_CONFIG_INVALID; | 309 | return ERROR_SYSTEM_CONFIG_INVALID; |
310 | } | 310 | } |
311 | - srs_trace("end of file. ret=%d", ret); | 311 | + srs_trace("config parsed EOF"); |
312 | 312 | ||
313 | return ret; | 313 | return ret; |
314 | } | 314 | } |
@@ -684,7 +684,13 @@ int SrsConfig::parse_file(const char* filename) | @@ -684,7 +684,13 @@ int SrsConfig::parse_file(const char* filename) | ||
684 | // TODO: check http. | 684 | // TODO: check http. |
685 | // TODO: check pid. | 685 | // TODO: check pid. |
686 | 686 | ||
687 | + // check log | ||
687 | std::string log_filename = this->get_srs_log_file(); | 688 | std::string log_filename = this->get_srs_log_file(); |
689 | + if (this->get_srs_log_tank_file() && log_filename.empty()) { | ||
690 | + ret = ERROR_SYSTEM_CONFIG_INVALID; | ||
691 | + srs_error("must specifies the file to write log to. ret=%d", ret); | ||
692 | + return ret; | ||
693 | + } | ||
688 | if (!log_filename.empty()) { | 694 | if (!log_filename.empty()) { |
689 | srs_trace("log file is %s", log_filename.c_str()); | 695 | srs_trace("log file is %s", log_filename.c_str()); |
690 | } | 696 | } |
@@ -1282,6 +1288,18 @@ string SrsConfig::get_srs_log_file() | @@ -1282,6 +1288,18 @@ string SrsConfig::get_srs_log_file() | ||
1282 | return conf->arg0(); | 1288 | return conf->arg0(); |
1283 | } | 1289 | } |
1284 | 1290 | ||
1291 | +bool SrsConfig::get_srs_log_tank_file() | ||
1292 | +{ | ||
1293 | + srs_assert(root); | ||
1294 | + | ||
1295 | + SrsConfDirective* conf = root->get("srs_log_tank"); | ||
1296 | + if (conf && conf->arg0() == "file") { | ||
1297 | + return true; | ||
1298 | + } | ||
1299 | + | ||
1300 | + return false; | ||
1301 | +} | ||
1302 | + | ||
1285 | bool SrsConfig::get_deamon() | 1303 | bool SrsConfig::get_deamon() |
1286 | { | 1304 | { |
1287 | srs_assert(root); | 1305 | srs_assert(root); |
@@ -148,6 +148,7 @@ public: | @@ -148,6 +148,7 @@ public: | ||
148 | virtual void get_engine_aparams(SrsConfDirective* engine, std::vector<std::string>& aparams); | 148 | virtual void get_engine_aparams(SrsConfDirective* engine, std::vector<std::string>& aparams); |
149 | virtual std::string get_engine_output(SrsConfDirective* engine); | 149 | virtual std::string get_engine_output(SrsConfDirective* engine); |
150 | virtual std::string get_ffmpeg_log_dir(); | 150 | virtual std::string get_ffmpeg_log_dir(); |
151 | + virtual bool get_srs_log_tank_file(); | ||
151 | virtual std::string get_srs_log_file(); | 152 | virtual std::string get_srs_log_file(); |
152 | virtual bool get_deamon(); | 153 | virtual bool get_deamon(); |
153 | virtual int get_max_connections(); | 154 | virtual int get_max_connections(); |
@@ -42,7 +42,7 @@ SrsThreadContext::~SrsThreadContext() | @@ -42,7 +42,7 @@ SrsThreadContext::~SrsThreadContext() | ||
42 | 42 | ||
43 | void SrsThreadContext::generate_id() | 43 | void SrsThreadContext::generate_id() |
44 | { | 44 | { |
45 | - static int id = 1; | 45 | + static int id = 100; |
46 | cache[st_thread_self()] = id++; | 46 | cache[st_thread_self()] = id++; |
47 | } | 47 | } |
48 | 48 | ||
@@ -230,20 +230,22 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | @@ -230,20 +230,22 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | ||
230 | log_data[size++] = LOG_TAIL; | 230 | log_data[size++] = LOG_TAIL; |
231 | log_data[size++] = 0; | 231 | log_data[size++] = 0; |
232 | 232 | ||
233 | - // if is error msg, then print color msg. | ||
234 | - // \033[31m : red text code in shell | ||
235 | - // \033[32m : green text code in shell | ||
236 | - // \033[33m : yellow text code in shell | ||
237 | - // \033[0m : normal text code | ||
238 | - if (_level <= SrsLogLevel::Trace) { | ||
239 | - printf("%s", str_log); | ||
240 | - } else if (_level == SrsLogLevel::Warn) { | ||
241 | - printf("\033[33m%s\033[0m", str_log); | ||
242 | - } else{ | ||
243 | - printf("\033[31m%s\033[0m", str_log); | 233 | + if (fd < 0 || !_srs_config->get_srs_log_tank_file()) { |
234 | + // if is error msg, then print color msg. | ||
235 | + // \033[31m : red text code in shell | ||
236 | + // \033[32m : green text code in shell | ||
237 | + // \033[33m : yellow text code in shell | ||
238 | + // \033[0m : normal text code | ||
239 | + if (_level <= SrsLogLevel::Trace) { | ||
240 | + printf("%s", str_log); | ||
241 | + } else if (_level == SrsLogLevel::Warn) { | ||
242 | + printf("\033[33m%s\033[0m", str_log); | ||
243 | + } else{ | ||
244 | + printf("\033[31m%s\033[0m", str_log); | ||
245 | + } | ||
244 | } | 246 | } |
245 | - | ||
246 | - // open log file. | 247 | + |
248 | + // open log file. if specified | ||
247 | if (!_srs_config->get_srs_log_file().empty() && fd < 0) { | 249 | if (!_srs_config->get_srs_log_file().empty() && fd < 0) { |
248 | std::string filename = _srs_config->get_srs_log_file(); | 250 | std::string filename = _srs_config->get_srs_log_file(); |
249 | 251 | ||
@@ -256,8 +258,9 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | @@ -256,8 +258,9 @@ void SrsFastLog::write_log(char *str_log, int size, int _level) | ||
256 | ); | 258 | ); |
257 | } | 259 | } |
258 | } | 260 | } |
261 | + | ||
259 | // write log to file. | 262 | // write log to file. |
260 | - if (fd > 0) { | 263 | + if (fd > 0 && _srs_config->get_srs_log_tank_file()) { |
261 | ::write(fd, str_log, size); | 264 | ::write(fd, str_log, size); |
262 | } | 265 | } |
263 | } | 266 | } |
@@ -179,26 +179,6 @@ SrsServer::~SrsServer() | @@ -179,26 +179,6 @@ SrsServer::~SrsServer() | ||
179 | int SrsServer::initialize() | 179 | int SrsServer::initialize() |
180 | { | 180 | { |
181 | int ret = ERROR_SUCCESS; | 181 | int ret = ERROR_SUCCESS; |
182 | - | ||
183 | - // use linux epoll. | ||
184 | - if (st_set_eventsys(ST_EVENTSYS_ALT) == -1) { | ||
185 | - ret = ERROR_ST_SET_EPOLL; | ||
186 | - srs_error("st_set_eventsys use linux epoll failed. ret=%d", ret); | ||
187 | - return ret; | ||
188 | - } | ||
189 | - srs_verbose("st_set_eventsys use linux epoll success"); | ||
190 | - | ||
191 | - if(st_init() != 0){ | ||
192 | - ret = ERROR_ST_INITIALIZE; | ||
193 | - srs_error("st_init failed. ret=%d", ret); | ||
194 | - return ret; | ||
195 | - } | ||
196 | - srs_verbose("st_init success"); | ||
197 | - | ||
198 | - // set current log id. | ||
199 | - _srs_context->generate_id(); | ||
200 | - srs_info("log set id success"); | ||
201 | - | ||
202 | return ret; | 182 | return ret; |
203 | } | 183 | } |
204 | 184 | ||
@@ -277,6 +257,32 @@ int SrsServer::acquire_pid_file() | @@ -277,6 +257,32 @@ int SrsServer::acquire_pid_file() | ||
277 | return ret; | 257 | return ret; |
278 | } | 258 | } |
279 | 259 | ||
260 | +int SrsServer::initialize_st() | ||
261 | +{ | ||
262 | + int ret = ERROR_SUCCESS; | ||
263 | + | ||
264 | + // use linux epoll. | ||
265 | + if (st_set_eventsys(ST_EVENTSYS_ALT) == -1) { | ||
266 | + ret = ERROR_ST_SET_EPOLL; | ||
267 | + srs_error("st_set_eventsys use linux epoll failed. ret=%d", ret); | ||
268 | + return ret; | ||
269 | + } | ||
270 | + srs_verbose("st_set_eventsys use linux epoll success"); | ||
271 | + | ||
272 | + if(st_init() != 0){ | ||
273 | + ret = ERROR_ST_INITIALIZE; | ||
274 | + srs_error("st_init failed. ret=%d", ret); | ||
275 | + return ret; | ||
276 | + } | ||
277 | + srs_verbose("st_init success"); | ||
278 | + | ||
279 | + // set current log id. | ||
280 | + _srs_context->generate_id(); | ||
281 | + srs_info("log set id success"); | ||
282 | + | ||
283 | + return ret; | ||
284 | +} | ||
285 | + | ||
280 | int SrsServer::listen() | 286 | int SrsServer::listen() |
281 | { | 287 | { |
282 | int ret = ERROR_SUCCESS; | 288 | int ret = ERROR_SUCCESS; |
@@ -80,6 +80,7 @@ public: | @@ -80,6 +80,7 @@ public: | ||
80 | public: | 80 | public: |
81 | virtual int initialize(); | 81 | virtual int initialize(); |
82 | virtual int acquire_pid_file(); | 82 | virtual int acquire_pid_file(); |
83 | + virtual int initialize_st(); | ||
83 | virtual int listen(); | 84 | virtual int listen(); |
84 | virtual int cycle(); | 85 | virtual int cycle(); |
85 | virtual void remove(SrsConnection* conn); | 86 | virtual void remove(SrsConnection* conn); |
@@ -60,18 +60,8 @@ int run_master() | @@ -60,18 +60,8 @@ int run_master() | ||
60 | signal(SIGNAL_RELOAD, handler); | 60 | signal(SIGNAL_RELOAD, handler); |
61 | signal(SIGTERM, handler); | 61 | signal(SIGTERM, handler); |
62 | signal(SIGINT, handler); | 62 | signal(SIGINT, handler); |
63 | - | ||
64 | - srs_trace("uname: "SRS_UNAME); | ||
65 | - srs_trace("build: %s, %s", SRS_BUILD_DATE, srs_is_little_endian()? "little-endian":"big-endian"); | ||
66 | - srs_trace("configure: "SRS_CONFIGURE); | ||
67 | - | ||
68 | - if ((ret = _srs_server->initialize()) != ERROR_SUCCESS) { | ||
69 | - return ret; | ||
70 | - } | ||
71 | - | ||
72 | - // TODO: create log dir in _srs_config->get_log_dir() | ||
73 | 63 | ||
74 | - if ((ret = _srs_server->acquire_pid_file()) != ERROR_SUCCESS) { | 64 | + if ((ret = _srs_server->initialize_st()) != ERROR_SUCCESS) { |
75 | return ret; | 65 | return ret; |
76 | } | 66 | } |
77 | 67 | ||
@@ -137,6 +127,8 @@ int main(int argc, char** argv) | @@ -137,6 +127,8 @@ int main(int argc, char** argv) | ||
137 | { | 127 | { |
138 | int ret = ERROR_SUCCESS; | 128 | int ret = ERROR_SUCCESS; |
139 | 129 | ||
130 | + srs_trace("srs(simple-rtmp-server)"); | ||
131 | + | ||
140 | // TODO: support both little and big endian. | 132 | // TODO: support both little and big endian. |
141 | srs_assert(srs_is_little_endian()); | 133 | srs_assert(srs_is_little_endian()); |
142 | 134 | ||
@@ -160,6 +152,18 @@ int main(int argc, char** argv) | @@ -160,6 +152,18 @@ int main(int argc, char** argv) | ||
160 | if ((ret = _srs_config->parse_options(argc, argv)) != ERROR_SUCCESS) { | 152 | if ((ret = _srs_config->parse_options(argc, argv)) != ERROR_SUCCESS) { |
161 | return ret; | 153 | return ret; |
162 | } | 154 | } |
155 | + | ||
156 | + srs_trace("uname: "SRS_UNAME); | ||
157 | + srs_trace("build: %s, %s", SRS_BUILD_DATE, srs_is_little_endian()? "little-endian":"big-endian"); | ||
158 | + srs_trace("configure: "SRS_CONFIGURE); | ||
159 | + | ||
160 | + if ((ret = _srs_server->initialize()) != ERROR_SUCCESS) { | ||
161 | + return ret; | ||
162 | + } | ||
163 | + | ||
164 | + if ((ret = _srs_server->acquire_pid_file()) != ERROR_SUCCESS) { | ||
165 | + return ret; | ||
166 | + } | ||
163 | 167 | ||
164 | return run(); | 168 | return run(); |
165 | } | 169 | } |
-
请 注册 或 登录 后发表评论