- Replace unreliable pexp patterns with PID-file approach - Add graceful shutdown with timeout handling in rc.d script - Implement process validation after startup - Add SIGHUP config reload support for Unix services - Ensure PID-file cleanup on service exit - Update systemd service to use PIDFile parameter Platform improvements: - OpenBSD: rc_check/rc_stop functions now PID-file based - Linux: systemd Type=forking with proper PIDFile support - Cross-platform: /var/run/furt.pid standard location Resolves service status detection issues where rcctl check showed (failed) despite running service due to process name variations across platforms.
54 lines
1.3 KiB
Bash
54 lines
1.3 KiB
Bash
#!/bin/ksh
|
|
|
|
daemon="/usr/local/share/furt/scripts/start.sh"
|
|
daemon_user="_furt"
|
|
daemon_cwd="/usr/local/share/furt"
|
|
|
|
. /etc/rc.d/rc.subr
|
|
|
|
# PID-File location
|
|
pidfile="/var/run/furt.pid"
|
|
|
|
# Custom rc_check function (PID-File based)
|
|
rc_check() {
|
|
[ -f "$pidfile" ] && kill -0 $(cat "$pidfile") 2>/dev/null
|
|
}
|
|
|
|
# Custom rc_stop function (PID-File based)
|
|
rc_stop() {
|
|
if [ -f "$pidfile" ]; then
|
|
local _pid=$(cat "$pidfile")
|
|
echo "Stopping furt (PID: $_pid)"
|
|
kill "$_pid" 2>/dev/null
|
|
# Wait for process to die
|
|
local _timeout=10
|
|
while [ $_timeout -gt 0 ] && kill -0 "$_pid" 2>/dev/null; do
|
|
sleep 1
|
|
_timeout=$((_timeout - 1))
|
|
done
|
|
# Force kill if still running
|
|
if kill -0 "$_pid" 2>/dev/null; then
|
|
echo "Force killing furt (PID: $_pid)"
|
|
kill -9 "$_pid" 2>/dev/null
|
|
fi
|
|
rm -f "$pidfile"
|
|
echo "furt stopped"
|
|
else
|
|
echo "furt not running (no PID-File)"
|
|
fi
|
|
}
|
|
|
|
# Custom rc_reload function (signal-based)
|
|
rc_reload() {
|
|
if rc_check; then
|
|
local _pid=$(cat "$pidfile")
|
|
echo "Reloading furt configuration (PID: $_pid)"
|
|
kill -HUP "$_pid"
|
|
else
|
|
echo "furt not running"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
rc_cmd $1
|
|
|