From 0061c66dfecc9b514cc432b9d9b7635b35e8505b Mon Sep 17 00:00:00 2001 From: desertwitch <24509509+desertwitch@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:35:45 +0200 Subject: [PATCH 1/3] /etc/rc.d/rc.rsyslogd: OS-native PID for decisions bugfix: multiple running rsyslogd processes (e.g. spawned by Docker containers) caused the rc.d script to think that the OS-native process was already running, resulting in startup failure of the OSes daemon. --- etc/rc.d/rc.rsyslogd | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/etc/rc.d/rc.rsyslogd b/etc/rc.d/rc.rsyslogd index 7fc994948..985a118d4 100755 --- a/etc/rc.d/rc.rsyslogd +++ b/etc/rc.d/rc.rsyslogd @@ -13,7 +13,7 @@ # Bergware - modified for Unraid OS, October 2023 DAEMON="Syslog server daemon" -PIDFILE=/var/run/rsyslogd.pid # native rsyslogd pid file +PIDFILE="/var/run/rsyslogd.pid" # native rsyslogd pid file # run & log functions . /etc/rc.d/rc.runlog @@ -29,7 +29,17 @@ create_xconsole(){ rsyslogd_running(){ sleep 0.1 - ps axc | grep -q ' rsyslogd' + [[ ! -f $PIDFILE ]] && return 1 + local RSPID + RSPID=$(cat "$PIDFILE") + if kill -0 "$RSPID" &>/dev/null; then + # PID is alive + return 0 + else + # PID is dead (remove stale PID file) + rm -f "$PIDFILE" + return 1 + fi } rsyslogd_start(){ @@ -38,7 +48,7 @@ rsyslogd_start(){ if rsyslogd_running; then REPLY="Already started" else - run /usr/sbin/rsyslogd -i $PIDFILE + run /usr/sbin/rsyslogd -i "$PIDFILE" if rsyslogd_running; then REPLY="Started"; else REPLY="Failed"; fi fi log "$DAEMON... $REPLY." @@ -50,8 +60,8 @@ rsyslogd_stop(){ if ! rsyslogd_running; then REPLY="Already stopped" else - run killall rsyslogd - rm -f $PIDFILE + run kill "$(cat "$PIDFILE")" + sleep 2 if ! rsyslogd_running; then REPLY="Stopped"; else REPLY="Failed"; fi fi log "$DAEMON... $REPLY." @@ -68,7 +78,7 @@ rsyslogd_reload(){ log "Reloading $DAEMON..." local REPLY REPLY="Reloaded" - [[ -f $PIDFILE ]] && run kill -HUP $(cat $PIDFILE) || REPLY="Failed" + [[ -f $PIDFILE ]] && run kill -HUP "$(cat "$PIDFILE")" || REPLY="Failed" log "$DAEMON... $REPLY." } From bf6d5982be002140957a5b74da502c91acb1d90b Mon Sep 17 00:00:00 2001 From: desertwitch <24509509+desertwitch@users.noreply.github.com> Date: Thu, 10 Oct 2024 06:49:58 +0200 Subject: [PATCH 2/3] /etc/rc.d/rc.rsyslogd: use pgrep, killall with PID namespace --- etc/rc.d/rc.rsyslogd | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/etc/rc.d/rc.rsyslogd b/etc/rc.d/rc.rsyslogd index 985a118d4..03315c715 100755 --- a/etc/rc.d/rc.rsyslogd +++ b/etc/rc.d/rc.rsyslogd @@ -29,15 +29,12 @@ create_xconsole(){ rsyslogd_running(){ sleep 0.1 - [[ ! -f $PIDFILE ]] && return 1 - local RSPID - RSPID=$(cat "$PIDFILE") - if kill -0 "$RSPID" &>/dev/null; then - # PID is alive + if pgrep --ns $$ -x rsyslogd &>/dev/null; then + # Daemon is alive return 0 else - # PID is dead (remove stale PID file) - rm -f "$PIDFILE" + # Daemon is dead (remove stale PID file) + [[ -f $PIDFILE ]] && rm -f "$PIDFILE" return 1 fi } @@ -60,7 +57,7 @@ rsyslogd_stop(){ if ! rsyslogd_running; then REPLY="Already stopped" else - run kill "$(cat "$PIDFILE")" + run killall --ns $$ rsyslogd sleep 2 if ! rsyslogd_running; then REPLY="Stopped"; else REPLY="Failed"; fi fi @@ -78,7 +75,7 @@ rsyslogd_reload(){ log "Reloading $DAEMON..." local REPLY REPLY="Reloaded" - [[ -f $PIDFILE ]] && run kill -HUP "$(cat "$PIDFILE")" || REPLY="Failed" + run killall -HUP --ns $$ rsyslogd || REPLY="Failed" log "$DAEMON... $REPLY." } From 06b1c9a20f8c01629e1ac91be6be115bed9ff074 Mon Sep 17 00:00:00 2001 From: desertwitch <24509509+desertwitch@users.noreply.github.com> Date: Thu, 10 Oct 2024 07:03:48 +0200 Subject: [PATCH 3/3] /etc/rc.d/rc.rsyslogd: check status before reload --- etc/rc.d/rc.rsyslogd | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/etc/rc.d/rc.rsyslogd b/etc/rc.d/rc.rsyslogd index 03315c715..e8eeea515 100755 --- a/etc/rc.d/rc.rsyslogd +++ b/etc/rc.d/rc.rsyslogd @@ -74,8 +74,12 @@ rsyslogd_restart(){ rsyslogd_reload(){ log "Reloading $DAEMON..." local REPLY - REPLY="Reloaded" - run killall -HUP --ns $$ rsyslogd || REPLY="Failed" + if ! rsyslogd_running; then + REPLY="Not running" + else + REPLY="Reloaded" + run killall -HUP --ns $$ rsyslogd || REPLY="Failed" + fi log "$DAEMON... $REPLY." }