From a5dc0e62b77614e9a51029fd000092ac8473110c Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 17 Oct 2016 15:37:36 +0200 Subject: [PATCH] Replaced init script by systemd unit Daemonization is handled by systemd. --- compctld.c | 17 +---- debian/changelog | 2 + debian/compctl.init | 139 ----------------------------------------- debian/compctl.service | 10 +++ debian/dirs | 1 - 5 files changed, 13 insertions(+), 156 deletions(-) delete mode 100644 debian/compctl.init create mode 100644 debian/compctl.service diff --git a/compctld.c b/compctld.c index 5e41ff4..34aad67 100644 --- a/compctld.c +++ b/compctld.c @@ -111,24 +111,9 @@ mprintf(int fd, char *fmt, ...) int main(int argc, char *argv[]) { - /* Do this while everyone can still see the error. */ - cgroup_init(); - - pid_t p = fork(); - if (p < 0) { - perror("fork"); - exit(EXIT_FAILURE); - } - if (p > 0) - exit(EXIT_SUCCESS); - - fclose(stderr); - fclose(stdout); - fclose(stdin); openlog("compctl", LOG_PID, LOG_DAEMON); cgroup_perror = logperror; - - setsid(); + cgroup_init(); int s = socket(AF_UNIX, SOCK_STREAM, 0); /* TODO: Protect against double execution? */ diff --git a/debian/changelog b/debian/changelog index 7ae41aa..1f85aa8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ compctl (1.2-1) stable; urgency=medium * Compctl now does not break other managers of cgroups (in particular systemd). + * Init script replaced by systemd unit. + -- Martin Mares <mares@kam.mff.cuni.cz> Mon, 17 Oct 2016 15:12:08 +0200 compctl (1.1-1) unstable; urgency=low diff --git a/debian/compctl.init b/debian/compctl.init deleted file mode 100644 index 41e27fe..0000000 --- a/debian/compctl.init +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/sh -### BEGIN INIT INFO -# Provides: compctl -# Required-Start: $local_fs $remote_fs -# Required-Stop: $remote_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Computations under control - control daemon -# Description: This daemon handles the priviledged cgroup management -# tasks for compctl. -### END INIT INFO - -# Author: Petr Baudis <pasky@ucw.cz> - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC=compctl # Introduce a short description here -NAME=compctl # Introduce the short server's name here -DAEMON=/usr/sbin/compctld # Introduce the server's location here -DAEMON_ARGS="" # Arguments to run the daemon with -PIDFILE= -SCRIPTNAME=/etc/init.d/$NAME - -# Exit if the package is not installed -[ -x $DAEMON ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME - -# Load the VERBOSE setting and other rcS variables -. /lib/init/vars.sh - -# Define LSB log_* functions. -# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. -. /lib/lsb/init-functions - -# -# Function that starts the daemon/service -# -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon --start --quiet --exec $DAEMON --test > /dev/null \ - || return 1 - start-stop-daemon --start --quiet --exec $DAEMON -- \ - $DAEMON_ARGS \ - || return 2 - # Add code here, if necessary, that waits for the process to be ready - # to handle requests from services started subsequently which depend - # on this one. As a last resort, sleep for some time. -} - -# -# Function that stops the daemon/service -# -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - # other if a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --exec $DAEMON - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - # Wait for children to finish too if this is a daemon that forks - # and if the daemon is only ever run from this initscript. - # If the above conditions are not satisfied then add some other code - # that waits for the process to drop all resources that could be - # needed by services started subsequently. A last resort is to - # sleep for some time. - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON - [ "$?" = 2 ] && return 2 - return "$RETVAL" -} - - -case "$1" in - start) - [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - status) - status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? - ;; - #reload|force-reload) - # - # If do_reload() is not implemented then leave this commented out - # and leave 'force-reload' as an alias for 'restart'. - # - #log_daemon_msg "Reloading $DESC" "$NAME" - #do_reload - #log_end_msg $? - #;; - restart|force-reload) - # - # If the "reload" option is implemented then remove the - # 'force-reload' alias - # - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; # Old process is still running - *) log_end_msg 1 ;; # Failed to start - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; - *) - #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac - -: diff --git a/debian/compctl.service b/debian/compctl.service new file mode 100644 index 0000000..55c6b8f --- /dev/null +++ b/debian/compctl.service @@ -0,0 +1,10 @@ +[Unit] +Description=Computations under control - control daemon +After=network.target +ConditionPathExists=!/etc/compctl-unlimited + +[Service] +ExecStart=/usr/sbin/compctld + +[Install] +WantedBy=multi-user.target diff --git a/debian/dirs b/debian/dirs index 101d7da..1948002 100644 --- a/debian/dirs +++ b/debian/dirs @@ -1,5 +1,4 @@ usr/bin usr/sbin -etc/init.d usr/share/man/man1 usr/share/doc/compctl -- GitLab