Check for agent already running (#16937)
* Check for server socket listen setup and exit normally instead of fatal() Move ML initialization until after socket listen is successful * Switch to error level
Stelios Fragkakis committed
Feb 5, 2024 at 18:14 UTC
8920bcbfc18cdeec4b8fd91c3756032e00ccc32b
3 files changed
+21
-11
daemon/main.c
+17
-7
@@ -2016,11 +2016,11 @@ int main(int argc, char **argv) {
2016
health_set_silencers_filename();
2017
health_initialize_global_silencers();
2018
2019
- // --------------------------------------------------------------------
2020
- // Initialize ML configuration
2021
-
2022
- delta_startup_time("initialize ML");
2023
- ml_init();
2019
+// // --------------------------------------------------------------------
2020
+// // Initialize ML configuration
2021
+//
2022
+// delta_startup_time("initialize ML");
2023
+// ml_init();
2024
2025
// --------------------------------------------------------------------
2026
// setup process signals
@@ -2073,8 +2073,18 @@ int main(int argc, char **argv) {
2073
web_client_api_v1_init();
2074
web_server_threading_selection();
2075
2076
- if(web_server_mode != WEB_SERVER_MODE_NONE)
2077
- api_listen_sockets_setup();
2076
+ if(web_server_mode != WEB_SERVER_MODE_NONE) {
2077
+ if (!api_listen_sockets_setup()) {
2078
+ netdata_log_error("Cannot setup listen port(s). Is Netdata already running?");
2079
+ exit(1);
2080
+ }
2081
+ }
2082
+
2083
+ // --------------------------------------------------------------------
2084
+ // Initialize ML configuration
2085
+
2086
+ delta_startup_time("initialize ML");
2087
+ ml_init();
2088
2089
#ifdef ENABLE_H2O
2090
delta_startup_time("initialize h2o server");
web/server/web_server.c
+3
-3
@@ -57,16 +57,16 @@ void debug_sockets() {
57
buffer_free(wb);
58
}
59
60
-void api_listen_sockets_setup(void) {
60
+bool api_listen_sockets_setup(void) {
61
int socks = listen_sockets_setup(&api_sockets);
62
63
if(!socks)
64
- fatal("LISTENER: Cannot listen on any API socket. Exiting...");
64
+ return false;
65
66
if(unlikely(debug_flags & D_WEB_CLIENT))
67
debug_sockets();
68
69
- return;
69
+ return true;
70
}
71
72
web/server/web_server.h
+1
-1
@@ -39,7 +39,7 @@ extern WEB_SERVER_MODE web_server_mode;
39
WEB_SERVER_MODE web_server_mode_id(const char *mode);
40
const char *web_server_mode_name(WEB_SERVER_MODE id);
41
42
-void api_listen_sockets_setup(void);
42
+bool api_listen_sockets_setup(void);
43
44
#define DEFAULT_TIMEOUT_TO_RECEIVE_FIRST_WEB_REQUEST 60
45
#define DEFAULT_DISCONNECT_IDLE_WEB_CLIENTS_AFTER_SECONDS 60