diff --git a/.version_history b/.version_history index 9e71a2c..777e6ad 100644 --- a/.version_history +++ b/.version_history @@ -20,5 +20,3 @@ 795f8867,78e8ded,fix/json-library-compatibility,2025-09-05T15:44:42Z,michael,git,lua-api 795f8867,d4fa6e3,fix/ssl-dependency-check,2025-09-05T16:20:08Z,michael,git,lua-api a670de0f,d271b84,refactor/extract-health-routes-and-server-core,2025-09-05T17:25:09Z,michael,git,lua-api -a670de0f,25a709e,feature/pid-file-service-management,2025-09-05T20:30:13Z,michael,git,lua-api -a670de0f,59f372f,feature/pid-file-service-management,2025-09-07T14:58:01Z,michael,git,lua-api diff --git a/deployment/linux/furt.service b/deployment/linux/furt.service index a504d30..f09104b 100644 --- a/deployment/linux/furt.service +++ b/deployment/linux/furt.service @@ -6,8 +6,7 @@ After=network.target Type=forking User=furt Group=furt -ExecStart=/usr/local/share/furt/scripts/start.sh -PIDFile=/var/run/furt/furt.pid +ExecStart=/usr/local/share/furt/scripts/start.sh start WorkingDirectory=/usr/local/share/furt Restart=always RestartSec=5 diff --git a/deployment/openbsd/rc.d-furt b/deployment/openbsd/rc.d-furt index bcdb4b9..465af19 100644 --- a/deployment/openbsd/rc.d-furt +++ b/deployment/openbsd/rc.d-furt @@ -3,52 +3,11 @@ daemon="/usr/local/share/furt/scripts/start.sh" daemon_user="_furt" daemon_cwd="/usr/local/share/furt" +daemon_flags="start" . /etc/rc.d/rc.subr -# PID-File location -pidfile="/var/run/furt/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 -} +pexp="lua.*src/main.lua" rc_cmd $1 diff --git a/scripts/setup-directories.sh b/scripts/setup-directories.sh index 97cc02f..2fdbad6 100755 --- a/scripts/setup-directories.sh +++ b/scripts/setup-directories.sh @@ -18,15 +18,12 @@ fi mkdir -p "$CONFIG_DIR" mkdir -p /usr/local/share/furt mkdir -p /var/log/furt -mkdir -p /var/run/furt # Set ownership for log directory (service user needs write access) chown "$USER:$GROUP" /var/log/furt -chown "$USER:$GROUP" /var/run/furt echo "Created directories:" echo " Config: $CONFIG_DIR" echo " Share: /usr/local/share/furt" echo " Logs: /var/log/furt (owned by $USER)" -echo " PID: /var/run/furt (owned by $USER)" diff --git a/scripts/start.sh b/scripts/start.sh index 41db621..4ad5591 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -19,10 +19,8 @@ LUA_COMMAND="" # Config check first if [ "$(uname)" = "OpenBSD" ] || [ "$(uname)" = "FreeBSD" ]; then CONFIG_FILE="/usr/local/etc/furt/furt.conf" - PID_FILE="/var/run/furt/furt.pid" else CONFIG_FILE="/etc/furt/furt.conf" - PID_FILE="/var/run/furt/furt.pid" fi if [ ! -f "$CONFIG_FILE" ] && [ ! -f "$PROJECT_DIR/config/furt.conf" ]; then @@ -89,38 +87,12 @@ cd "$PROJECT_DIR" echo -e "${GREEN}Starting Furt...${NC}" -# PID-File cleanup function -cleanup_pid() { - if [ -f "$PID_FILE" ]; then - rm -f "$PID_FILE" - fi -} - # Service vs Interactive Detection if [ ! -t 0 ] || [ ! -t 1 ]; then - # Service mode - Background + PID-File - echo -e "${GREEN}Service mode: Background + PID-File${NC}" - - # Start process in background + # Service mode - Background "$LUA_COMMAND" src/main.lua & - PID=$! - - # Write PID-File - echo "$PID" > "$PID_FILE" - echo -e "${GREEN}Furt started (PID: $PID, PID-File: $PID_FILE)${NC}" - - # Verify process is still running after short delay - sleep 1 - if ! kill -0 "$PID" 2>/dev/null; then - echo -e "${RED}Error: Process died immediately${NC}" - cleanup_pid - exit 1 - fi - - echo -e "${GREEN}Service startup successful${NC}" else - # Interactive mode - Foreground (no PID-File) - echo -e "${GREEN}Interactive mode: Foreground${NC}" + # Interactive mode - Foreground exec "$LUA_COMMAND" src/main.lua fi