Skip to content
Snippets Groups Projects
Commit a5dc0e62 authored by Martin Mareš's avatar Martin Mareš
Browse files

Replaced init script by systemd unit

Daemonization is handled by systemd.
parent 33bca2c8
No related branches found
No related tags found
No related merge requests found
......@@ -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? */
......
......@@ -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
......
#!/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
:
[Unit]
Description=Computations under control - control daemon
After=network.target
ConditionPathExists=!/etc/compctl-unlimited
[Service]
ExecStart=/usr/sbin/compctld
[Install]
WantedBy=multi-user.target
usr/bin
usr/sbin
etc/init.d
usr/share/man/man1
usr/share/doc/compctl
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment