Hi all,

when playing with systemd by default on Mandriva (e.g., with
systemd-sysvinit installed and booting), we have faced a strange problem
when rebooting - the reboot process simple hanged and would not proceed.

After some investigation, I've found out that it is caused by the
systemd stopping our messagebus service (which is, well, dbus). So when
I went ahead and commented the killproc routine inside stop() of
messagebus, the rebooting and shutting down worked just fine.

I know that it is perhaps a simple newbie question, but is it something
that must be changed in our messagebus init script (attached), or some
systemd configuration which we could change to make it work?

I was thinking on relying on the result of 'systemctl is-active
reboot.service' to check whether the system is being rebooted and, if
so, do not stop messagebus, but it looks like a hack to me..

Thanks!

-- 
Eugeni Dodonov
#!/bin/sh
#
# messagebus:   The D-BUS systemwide message bus
#
# chkconfig: 23457 53 66
# description:  This is a daemon which broadcasts notifications of system 
events \
#               and other messages. See 
http://www.freedesktop.org/software/dbus/
#
# processname: dbus-daemon
# pidfile: /var/run/messagebus.pid
#
### BEGIN INIT INFO
# Provides: messagebus
# Required-Start: $syslog $local_fs
# Required-Stop: $syslog $local_fs
# Should-Start: network-auth
# Default-Start: 2 3 4 5 7
# Default-Stop: 0 1 6
# Short-Description: The D-Bus systemwide message bus
# Description: This is a daemon which broadcasts notifications of system 
#  events and other messages. See http://www.freedesktop.org/software/dbus
### END INIT INFO

# Sanity checks.
[ -x /usr/bin/dbus-daemon ] || exit 0

# Source function library.
. /etc/rc.d/init.d/functions

# so we can rearrange this easily
processname=dbus-daemon
servicename=messagebus

RETVAL=0

start() {
    gprintf "Starting system message bus: "
    if [ -x /usr/bin/dbus-uuidgen ] ; then
        /usr/bin/dbus-uuidgen --ensure
    fi

    daemon --check $servicename $processname --system
    RETVAL=$?
    countdown=10
    until [ -e /var/run/dbus/system_bus_socket -o $countdown -eq 0 ]; do
       sleep 1; let countdown=$countdown-1;
    done
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$servicename
}

stop() {
    gprintf "Stopping system message bus: "

    ## we don't want to kill all the per-user $processname, we want
    ## to use the pid file *only*; because we use the fake nonexistent 
    ## program name "$servicename" that should be safe-ish
    # (SYSTEMD) - eugeni - if we comment the following line, reboot proceeeds
    killproc $servicename -TERM
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f /var/lock/subsys/$servicename
        rm -f /var/run/messagebus.pid
    fi
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $servicename
        RETVAL=$?
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$servicename ]; then
            stop
            start
        fi
        ;;
    reload)
        gprintf "Message bus can't reload its configuration, you have to 
restart it\n"
        RETVAL=$?
        ;;
    *)
        gprintf "Usage: %s {start|stop|status|restart|condrestart|reload}\n" 
"$0"
        ;;
esac
exit $RETVAL

Attachment: systemctl.dump.bz2
Description: application/bzip

Attachment: systemctl.list-units.bz2
Description: application/bzip

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to