[X2Go-Commits] [x2goserver] 08/15: debian/x2goserver.init: rewrite init script to make it idempotent and actually check if the cleanup service was started correctly.

git-admin at x2go.org git-admin at x2go.org
Thu Apr 15 11:15:02 CEST 2021


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goserver.

commit ff07123350b20d864f2e1bbdb54e7a102fc95332
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Wed Apr 14 12:46:31 2021 +0200

    debian/x2goserver.init: rewrite init script to make it idempotent and actually check if the cleanup service was started correctly.
---
 debian/changelog       |   3 ++
 debian/x2goserver.init | 101 +++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 83 insertions(+), 21 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 1d3f9c67..84ca3588 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -423,6 +423,9 @@ x2goserver (4.1.0.4-0x2go1.2) UNRELEASED; urgency=medium
       "double-quote" the resulting string.
   * debian/libx2go-server-perl.install:
     + Remove duplicated entry for X2Go/Utils.pm.
+  * debian/x2goserver.init:
+    + Rewrite init script to make it idempotent and actually check if the
+      cleanup service was started correctly.
 
   [ Oleksandr Shneyder ]
   * New upstream version (4.1.0.4):
diff --git a/debian/x2goserver.init b/debian/x2goserver.init
index 9d609571..fdf5d2b8 100644
--- a/debian/x2goserver.init
+++ b/debian/x2goserver.init
@@ -10,29 +10,92 @@
 # Description:       The X2Go daemon is responsible for post-session clean-ups
 ### END INIT INFO
 
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-XSOCKDIR=/tmp/.X11-unix
+PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
+XSOCKDIR='/tmp/.X11-unix'
+DAEMON='/usr/sbin/x2gocleansessions'
+PIDFILE='/var/run/x2goserver.pid'
+NAME='X2Go Server clean-up daemon'
 
-. /lib/lsb/init-functions
+. '/lib/lsb/init-functions'
 
 start()
 {
-		if [ ! -d $XSOCKDIR ]
+		# Create socket dir if necessary.
+		if [ ! -d "${XSOCKDIR}" ]
 		then
-			mkdir $XSOCKDIR
-			chmod 1777 $XSOCKDIR
+			mkdir "${XSOCKDIR}"
+			chmod '1777' "${XSOCKDIR}"
 		fi
-		log_action_msg "Cleaning up stale X2Go sessions"
-		x2gocleansessions
+
+		log_daemon_msg "Starting ${NAME}" "${DAEMON##*/}"
+
+		# Check if daemon is already running.
+		local status='0'
+		pidofproc -p "${PIDFILE}" "${DAEMON}" >'/dev/null'|| status="${?}"
+		if [ '0' = "${status}" ]; then
+			# It is, nothing else to do.
+			log_end_msg '0'
+			return '0'
+		fi
+
+		# Otherwise, start it.
+		status='0'
+		"${DAEMON}" || status="${?}"
+
+		# Check if that was successful.
+		if [ '0' != "${status}" ]; then
+			log_end_msg "${status}"
+			return "${status}"
+		fi
+
+		# It was, sleep a bit and ...
+		sleep '1'
+
+		# ... recheck its status, in case it died in-between.
+		status='0'
+		pidofproc -p "${PIDFILE}" "${DAEMON}" >'/dev/null' || status="${?}"
+		log_end_msg "${status}"
+
+		return "${status}"
 }
 
 stop()
 {
-		# kill x2gocleansessions, ignore on failure
-		killall x2gocleansessions || true
+		log_daemon_msg "Stopping ${NAME}" "${DAEMON##*/}"
+
+		# Check if daemon is already dead.
+		local status='0'
+		pidofproc -p "${PIDFILE}" "${DAEMON}" >'/dev/null' || status="${?}"
+		if [ '0' != "${status}" ]; then
+			# It is, nothing else to do.
+			log_end_msg '0'
+			return '0'
+		fi
+
+		# Otherwise, let's kill it.
+		status='0'
+		# Make sure to truncate the command name to 15 characters because of Linux kernel limitations.
+		# Also, hope that other kernels also limit the command name to 15 characters...
+		local proc_name="$(echo "${DAEMON##*/}" | cut -c '1-15')"
+		start-stop-daemon --stop --quiet --oknodo --name "${proc_name}" --pidfile "${PIDFILE}" || status="${?}"
+
+		# Check its status.
+		if [ '0' != "${status}" ]; then
+			# Process wasn't killed, which is weird, since we made sure that it did via pidofproc.
+			# Maybe the process name truncation had side-effects.
+			# In any case, report the failure.
+			log_end_msg "${status}"
+			return "${status}"
+		else
+			# Otherwise, clean up PID file.
+			pidofproc -p "${PIDFILE}" "${DAEMON}" >'/dev/null' || rm -f "${PIDFILE}"
+		fi
+
+		log_end_msg "${status}"
+		return "${status}"
 }
 
-case "$1" in
+case "${1}" in
 	start)
 		start
 	;;
@@ -41,21 +104,17 @@ case "$1" in
 	;;
 	reload|force-reload|restart)
 		stop
-		sleep 1
+		sleep '1'
 		start
 	;;
 	status)
-		if ps -C x2gocleansessions 1>/dev/null 2>/dev/null; then
-			log_action_msg "X2Go Server clean-up daemon is up and running"
-		else
-			log_warning_msg "X2Go Server clean-up daemon is down"
-		fi
+		status_of_proc -p "${PIDFILE}" "${DAEMON}" "${NAME}"
 	;;
 	*)
-		N=/etc/init.d/x2goserver
-		echo "Usage: $N {start|stop|restart|force-reload}" >&2
-		exit 1
+		N='/etc/init.d/x2goserver'
+		echo "Usage: ${N} {start|stop|restart|force-reload}" >&2
+		exit '1'
 	;;
 esac
 
-exit 0
+exit '0'

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git


More information about the x2go-commits mailing list