为监控Agent增加了后台运行选项

This commit is contained in:
Alex Yang
2025-12-06 23:52:59 +08:00
parent 667e370f79
commit 611c8dac0e
6 changed files with 429 additions and 7 deletions

Binary file not shown.

View File

@@ -239,3 +239,270 @@
2025/12/05 00:27:09 Processing log file: /var/log/vmware-vmtoolsd-root.log
2025/12/05 00:27:09 Successfully collected 0 logs
2025/12/05 00:27:09 Metrics collected: Agent=yunc, CPU=20.43%, Memory=43.79%, Disk=25.26%
2025/12/06 23:49:57 main.go:549: Config loaded from ./agent.json
2025/12/06 23:49:57 main.go:379: Config saved to ./agent.json
2025/12/06 23:49:57 main.go:290: Agent ID: agent-1765036079406873071-1191088, Name: cloud
2025/12/06 23:49:57 main.go:1734: Agent started, reporting to http://localhost:8080/api every 10s, collecting data every 1s
2025/12/06 23:49:57 main.go:1685: Starting HTTP server on :8081
2025/12/06 23:49:57 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:49:57 main.go:1262: Found 10 log files to process
2025/12/06 23:49:57 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:49:57 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:49:57 main.go:1430: Successfully collected 50 logs
2025/12/06 23:49:59 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:49:59 main.go:1262: Found 10 log files to process
2025/12/06 23:49:59 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:49:59 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:49:59 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:00 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:00 main.go:1262: Found 10 log files to process
2025/12/06 23:50:00 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:00 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:00 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:01 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:01 main.go:1262: Found 10 log files to process
2025/12/06 23:50:01 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:01 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:01 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:01 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:01 main.go:1262: Found 10 log files to process
2025/12/06 23:50:01 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:01 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:01 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:02 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:02 main.go:1262: Found 10 log files to process
2025/12/06 23:50:02 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:02 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:02 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:03 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:03 main.go:1262: Found 10 log files to process
2025/12/06 23:50:03 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:03 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:03 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:04 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:04 main.go:1262: Found 10 log files to process
2025/12/06 23:50:04 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:04 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:04 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:05 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:05 main.go:1262: Found 10 log files to process
2025/12/06 23:50:05 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:05 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:05 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:06 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:06 main.go:1262: Found 10 log files to process
2025/12/06 23:50:06 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:06 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:06 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:07 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:07 main.go:1262: Found 10 log files to process
2025/12/06 23:50:07 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:07 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:07 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:07 main.go:1581: Sending 11 metrics to server: http://localhost:8080/api
2025/12/06 23:50:07 main.go:1593: Server returned status code 401
2025/12/06 23:50:07 main.go:1804: Failed to send metrics: server returned status code 401
2025/12/06 23:50:08 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:08 main.go:1262: Found 10 log files to process
2025/12/06 23:50:08 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:08 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:08 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:09 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:09 main.go:1262: Found 10 log files to process
2025/12/06 23:50:09 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:09 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:09 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:10 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:10 main.go:1262: Found 10 log files to process
2025/12/06 23:50:10 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:10 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:10 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:10 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:10 main.go:1262: Found 10 log files to process
2025/12/06 23:50:10 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:10 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:10 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:11 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:11 main.go:1262: Found 10 log files to process
2025/12/06 23:50:11 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:11 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:11 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:13 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:13 main.go:1262: Found 10 log files to process
2025/12/06 23:50:13 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:13 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:13 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:13 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:13 main.go:1262: Found 10 log files to process
2025/12/06 23:50:13 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:13 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:13 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:14 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:14 main.go:1262: Found 10 log files to process
2025/12/06 23:50:14 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:14 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:14 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:15 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:15 main.go:1262: Found 10 log files to process
2025/12/06 23:50:15 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:15 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:15 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:16 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:16 main.go:1262: Found 10 log files to process
2025/12/06 23:50:16 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:16 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:16 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:17 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:17 main.go:1262: Found 10 log files to process
2025/12/06 23:50:17 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:17 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:17 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:17 main.go:1581: Sending 10 metrics to server: http://localhost:8080/api
2025/12/06 23:50:17 main.go:1593: Server returned status code 401
2025/12/06 23:50:17 main.go:1804: Failed to send metrics: server returned status code 401
2025/12/06 23:50:18 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:18 main.go:1262: Found 10 log files to process
2025/12/06 23:50:18 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:18 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:18 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:19 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:19 main.go:1262: Found 10 log files to process
2025/12/06 23:50:19 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:19 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:19 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:20 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:20 main.go:1262: Found 10 log files to process
2025/12/06 23:50:20 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:20 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:20 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:21 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:21 main.go:1262: Found 10 log files to process
2025/12/06 23:50:21 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:21 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:21 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:22 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:22 main.go:1262: Found 10 log files to process
2025/12/06 23:50:22 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:22 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:22 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:23 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:23 main.go:1262: Found 10 log files to process
2025/12/06 23:50:23 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:23 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:23 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:24 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:24 main.go:1262: Found 10 log files to process
2025/12/06 23:50:24 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:24 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:24 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:25 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:25 main.go:1262: Found 10 log files to process
2025/12/06 23:50:25 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:25 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:25 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:26 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:26 main.go:1262: Found 10 log files to process
2025/12/06 23:50:26 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:26 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:26 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:27 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:27 main.go:1262: Found 10 log files to process
2025/12/06 23:50:27 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:27 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:27 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:27 main.go:1581: Sending 10 metrics to server: http://localhost:8080/api
2025/12/06 23:50:27 main.go:1593: Server returned status code 401
2025/12/06 23:50:27 main.go:1804: Failed to send metrics: server returned status code 401
2025/12/06 23:50:28 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:28 main.go:1262: Found 10 log files to process
2025/12/06 23:50:28 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:28 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:28 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:29 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:29 main.go:1262: Found 10 log files to process
2025/12/06 23:50:29 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:29 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:29 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:30 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:30 main.go:1262: Found 10 log files to process
2025/12/06 23:50:30 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:30 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:30 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:31 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:31 main.go:1262: Found 10 log files to process
2025/12/06 23:50:31 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:31 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:31 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:32 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:32 main.go:1262: Found 10 log files to process
2025/12/06 23:50:32 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:32 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:32 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:33 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:33 main.go:1262: Found 10 log files to process
2025/12/06 23:50:33 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:33 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:33 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:34 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:34 main.go:1262: Found 10 log files to process
2025/12/06 23:50:34 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:34 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:34 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:35 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:35 main.go:1262: Found 10 log files to process
2025/12/06 23:50:35 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:35 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:35 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:36 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:36 main.go:1262: Found 10 log files to process
2025/12/06 23:50:36 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:36 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:36 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:37 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:37 main.go:1262: Found 10 log files to process
2025/12/06 23:50:37 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:37 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:37 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:37 main.go:1581: Sending 10 metrics to server: http://localhost:8080/api
2025/12/06 23:50:37 main.go:1593: Server returned status code 401
2025/12/06 23:50:37 main.go:1804: Failed to send metrics: server returned status code 401
2025/12/06 23:50:38 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:38 main.go:1262: Found 10 log files to process
2025/12/06 23:50:38 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:38 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:38 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:39 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:39 main.go:1262: Found 10 log files to process
2025/12/06 23:50:39 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:39 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:39 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:40 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:40 main.go:1262: Found 10 log files to process
2025/12/06 23:50:40 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:40 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:40 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:41 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:41 main.go:1262: Found 10 log files to process
2025/12/06 23:50:41 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:41 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:41 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:42 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:42 main.go:1262: Found 10 log files to process
2025/12/06 23:50:42 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:42 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:42 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:43 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:43 main.go:1262: Found 10 log files to process
2025/12/06 23:50:43 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:43 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:43 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:44 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:44 main.go:1262: Found 10 log files to process
2025/12/06 23:50:44 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:44 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:44 main.go:1430: Successfully collected 50 logs
2025/12/06 23:50:45 main.go:1243: Attempting to collect logs from /var/log
2025/12/06 23:50:45 main.go:1262: Found 10 log files to process
2025/12/06 23:50:45 main.go:1269: Processing log file: /var/log/cfg_init.log
2025/12/06 23:50:45 main.go:1269: Processing log file: /var/log/dnf.log
2025/12/06 23:50:45 main.go:1430: Successfully collected 50 logs

View File

@@ -2,11 +2,7 @@ ssh root@10.35.10.130 killall agent monitor-agent
ssh root@10.35.10.90 killall agent monitor-agent
ssh root@10.35.10.70 killall agent monitor-agent
scp monitor-agent root@10.35.10.130:/root/monitor/
scp monitor-agent root@10.35.10.90:/root/monitor/
scp monitor-agent root@10.35.10.70:/root/monitor/
ssh root@10.35.10.90 cd /root/monitor/ && screen -S agent monitor-agent
ssh root@10.35.10.70 cd /root/monitor/ && screen -S agent monitor-agent
ssh root@10.35.10.130 cd /root/monitor/ && screen -S agent monitor-agent
scp ./monitor-agent root@10.35.10.130:/root/monitor/
scp ./monitor-agent root@10.35.10.90:/root/monitor/
scp ./monitor-agent root@10.35.10.70:/root/monitor/

View File

@@ -3,18 +3,22 @@ package main
import (
"bytes"
"encoding/json"
"flag"
"fmt"
"io"
"log"
stdnet "net"
"net/http"
"os"
"os/exec"
"os/signal"
"path/filepath"
"runtime"
"sort"
"strconv"
"strings"
"sync"
"syscall"
"time"
"github.com/shirou/gopsutil/cpu"
@@ -159,6 +163,16 @@ var config Config
// 保存解析后的时间间隔
var parsedInterval time.Duration
// 命令行参数
var (
// 是否以守护进程模式运行
daemonMode bool
// 日志文件路径
logFile string
// 进程ID文件路径
pidFile string
)
// 保存上一次网络流量采集的数据
type NetworkStats struct {
BytesSent uint64
@@ -365,6 +379,115 @@ func saveConfigFile() {
log.Printf("Config saved to %s", configFile)
}
// daemonize 实现守护进程功能
func daemonize() error {
// 在Go中实现daemon的正确方式是启动一个新的进程
// 检查是否已经是守护进程模式
if os.Getenv("DAEMONIZED") == "1" {
return nil
}
// 获取可执行文件的绝对路径
execPath, err := os.Executable()
if err != nil {
return fmt.Errorf("failed to get executable path: %v", err)
}
// 创建环境变量,标记为守护进程模式
env := append(os.Environ(), "DAEMONIZED=1")
// 启动新进程
cmd := exec.Command(execPath, os.Args[1:]...)
cmd.Env = env
cmd.Stdin = nil
cmd.Stdout = nil
cmd.Stderr = nil
cmd.Dir = "/"
cmd.SysProcAttr = &syscall.SysProcAttr{
Setsid: true,
}
// 启动进程
if err := cmd.Start(); err != nil {
return fmt.Errorf("failed to start daemon: %v", err)
}
// 父进程退出
os.Exit(0)
return nil
}
// savePID 保存进程ID到文件
func savePID() error {
if pidFile == "" {
return nil
}
// 获取当前进程ID
pid := strconv.Itoa(os.Getpid())
// 写入PID文件
if err := os.WriteFile(pidFile, []byte(pid), 0644); err != nil {
return fmt.Errorf("failed to write PID file: %v", err)
}
return nil
}
// removePID 删除PID文件
func removePID() {
if pidFile != "" {
os.Remove(pidFile)
}
}
// initLogging 初始化日志配置
func initLogging() error {
// 默认日志输出到标准输出
var output io.Writer = os.Stdout
// 如果指定了日志文件,则输出到文件
if logFile != "" {
// 处理日志文件路径
logFilePath := logFile
// 如果是相对路径,则使用可执行文件所在的目录作为基准目录
if !filepath.IsAbs(logFilePath) {
// 获取可执行文件的目录
execPath, err := os.Executable()
if err != nil {
return fmt.Errorf("failed to get executable path: %v", err)
}
execDir := filepath.Dir(execPath)
// 构造绝对路径
logFilePath = filepath.Join(execDir, logFilePath)
}
// 打开日志文件,支持追加写入
file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
return fmt.Errorf("failed to open log file: %v", err)
}
output = file
// 确保进程退出时关闭文件
go func() {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
<-sigCh
file.Close()
}()
}
// 配置日志输出格式
log.SetOutput(output)
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
return nil
}
// 读取配置文件
func readConfigFile() {
// 获取配置文件路径,默认./agent.json可通过环境变量指定
@@ -1566,9 +1689,45 @@ func startHTTPServer() {
}
func main() {
// 解析命令行参数
flag.BoolVar(&daemonMode, "daemon", false, "Run as daemon (background process)")
flag.BoolVar(&daemonMode, "d", false, "Run as daemon (background process) - shorthand")
flag.StringVar(&logFile, "log-file", "", "Path to log file")
flag.StringVar(&logFile, "l", "", "Path to log file - shorthand")
flag.StringVar(&pidFile, "pid-file", "/tmp/monitor-agent.pid", "Path to PID file")
flag.StringVar(&pidFile, "p", "/tmp/monitor-agent.pid", "Path to PID file - shorthand")
flag.Parse()
// 初始化日志配置
if err := initLogging(); err != nil {
fmt.Printf("Failed to initialize logging: %v\n", err)
os.Exit(1)
}
// 如果指定了守护进程模式,则启动守护进程
if daemonMode {
if err := daemonize(); err != nil {
log.Fatalf("Failed to daemonize: %v", err)
}
}
// 初始化配置
initConfig()
// 保存PID文件
if err := savePID(); err != nil {
log.Printf("Warning: Failed to save PID file: %v", err)
}
// 注册信号处理确保进程退出时删除PID文件
go func() {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
<-sigCh
removePID()
os.Exit(0)
}()
// 启动HTTP服务器异步
go startHTTPServer()

Binary file not shown.