Keep socket listener active during deployment

This commit is contained in:
udo
2026-07-20 14:07:28 +00:00
parent e22cbf8882
commit 91c745c44b
3 changed files with 13 additions and 0 deletions
+7
View File
@@ -169,6 +169,13 @@ systemctl daemon-reload
systemctl restart uce.service
```
When `uce.socket` is active, restart only `uce.service` (or use
`scripts/systemd/manage-uce-service.sh restart`). The socket unit must retain
ownership of the FastCGI listener while workers change. Restarting
`uce.socket` alongside the service removes that listener briefly and can expose
HTTP 502 responses through nginx. Restart the socket unit only to repair the
socket itself, with an explicit outage window.
## Runtime configuration
Create `/etc/uce/settings.cfg` from `etc/uce/settings.cfg` and adjust paths to your checkout root. Replace checkout-specific settings such as `WASM_CORE_PATH` with `<UCE_REPO_ROOT>/bin/wasm/core.wasm` or leave it relative to `COMPILER_SYS_PATH` as appropriate.
+3
View File
@@ -192,6 +192,9 @@ the service and its post-fork workers restart. Direct launches without systemd
activation retain the existing configured Unix/TCP listener behavior.
The service preserves its runtime directory across service restarts because the
socket unit, not the service unit, owns a listener path inside that directory.
Normal deployments therefore restart only `uce.service`; restarting
`uce.socket` at the same time removes the listener and forfeits the zero-gap
handoff.
On termination the parent asks render workers to close their listeners, finish
accepted connections within the bounded worker drain interval, and only then
exits. This prevents an accepted FastCGI request from being reset at handoff;
+3
View File
@@ -24,6 +24,9 @@ inode_before=$(stat -c %i "$socket_path")
load_pid=$!
sleep 0.05
systemctl restart "$service_name"
systemctl is-active --quiet "$socket_name"
inode_during=$(stat -c %i "$socket_path")
[[ "$inode_during" = "$inode_before" ]]
wait "$load_pid"
inode_after=$(stat -c %i "$socket_path")