我有一个用 Go 语言编写的简单服务。它启动带有一些业务逻辑的 Web 服务器。现在我们必须重新加载该服务。这是kill -HUP 信号。通过该信号,初始进程分叉并为新进程中的连接提供服务。一切都很好,但我们想使用 systemd 来管理这项服务。看起来 systemd 认为这是失败(初始进程死亡)并且在重新加载进程重新启动后:
Aug 11 06:19:12 developmetn systemd[1]: my-proxy.service: Failed with result 'timeout'.
Aug 11 06:19:12 developmetn systemd[1]: Failed to start my-proxy image proxy
Aug 11 06:19:15 developmetn systemd[1]: my-proxy.service: Scheduled restart job, restart counter is at 508.
Aug 11 06:19:15 developmetn systemd[1]: Stopped my-proxy image proxy.
Aug 11 06:19:15 developmetn systemd[1]: Starting my-proxy image proxy...
显然,这会扼杀在重新加载期间为 100% 连接提供服务的想法。如何避免这种情况?我们尝试了类型=叉子选项,但 systemctl reload my-proxy.service 命令执行很长时间。
[Unit]
Description=image proxy
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/my-proxy &
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
WorkingDirectory=/etc/my-proxy/
LimitNOFILE=infinity
RestartSec=3
[Install]
WantedBy=multi-user.target