On Wed, Feb 04, 2015 at 12:51:08PM -0800, The Lee-Man wrote:
> >
> > I'm wondering if it has something to do with the ExecStop command
> > returning before iscsid actually terminates, although I'm not sure
> > what's triggering the service restart.
> >
>
> I think you're onto the meat of the problem: the sequencing systemd does
> between the "ExecStop=" and the command itself.
>
> The systemd.service(5) man page says about ExecStop:
>
> "...After the commands configured in this option are run, all processes
> remaining for a service are terminated according to the KillMode= setting
> (see systemd.kill(5))."
>
> So I'm thinking systemd does not like that this command actually stops the
> service. But this only happens if the service is socket-activated, so it
> must be the socket service that is restarting iscsid. If I stop
> iscsid.socket before iscsid.service, this does not happen. But systemd
> doesn't normally shut things down that way, since iscsid.service depends on
> iscsid.socket.
OK, I ran this test script until it failed in the way you're seeing
---
#!/bin/sh
# make sure systemd is logging at debug level
LOGLEVELDEBUG=$(($(kill -l RTMIN) + 22))
kill -n $LOGLEVELDEBUG 1
while true; do
# use discovery to activate systemd
iscsiadm -m discovery -t st -p 192.168.122.1
sleep 2
systemctl stop iscsid.service
if [ $? -ne 0 ]; then
exit $?
fi
sleep 2
done
journalctl -b -x -u iscsid.service -u iscsid.socket | gzip > systemd-iscsid.gz
---
Here's the journal output from the final, failing, pass
(bear with me, this is kind of long)
TL;DR - systemd starts listening on the admin socket again before it
even runs iscsiadm, and the IMMEDIATE_STOP command actually enqueues a
service start job.
This first part starts iscsid via socket activation, no problems
systemd[1]: Incoming traffic on iscsid.socket
systemd[1]: Trying to enqueue job iscsid.service/start/replace
systemd[1]: Installed new job iscsid.service/start as 6572
systemd[1]: Enqueued job iscsid.service/start as 6572
systemd[1]: iscsid.socket changed listening -> running
systemd[1]: Starting Open-iSCSI...
-- Subject: Unit iscsid.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit iscsid.service has begun starting up.
systemd[1]: About to execute: /usr/sbin/iscsid -f
systemd[1]: Forked /usr/sbin/iscsid as 27674
systemd[1]: iscsid.service changed dead -> running
systemd[27674]: Executing: /usr/sbin/iscsid -f
systemd[1]: Job iscsid.service/start finished, result=done
systemd[1]: Started Open-iSCSI.
-- Subject: Unit iscsid.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit iscsid.service has finished starting up.
--
-- The start-up result is done.
Now systemd is sent the stop command
systemd[1]: Trying to enqueue job iscsid.service/stop/replace
systemd[1]: Installed new job iscsid.service/stop as 6577
systemd[1]: Enqueued job iscsid.service/stop as 6577
systemd[1]: Stopping Open-iSCSI...
-- Subject: Unit iscsid.service has begun shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit iscsid.service has begun shutting down.
systemd forks a new process in preparation to run the ExecStop
systemd[1]: About to execute: /sbin/iscsiadm -k 0 2
systemd[1]: Forked /sbin/iscsiadm as 27679
but then goes ahead and declares the service stopped
systemd[1]: iscsid.service changed running -> stop
systemd[1]: iscsid.socket got notified about service death (failed
permanently: no)
and starts listening on the socket already
systemd[1]: iscsid.socket changed running -> listening
and now actually gets around to execing iscsiadm
systemd[27679]: Executing: /sbin/iscsiadm -k 0 2
and the socket unit sees the MGMT_IPC_IMMEDIATE_STOP command as a reason
to _start_ iscsid.service
systemd[1]: Incoming traffic on iscsid.socket
systemd[1]: Trying to enqueue job iscsid.service/start/replace
the stop job isn't finished, but we've got a start job now so cancel it
systemd[1]: Job iscsid.service/stop finished, result=canceled
systemd[1]: Installed new job iscsid.service/start as 6579
systemd[1]: Enqueued job iscsid.service/start as 6579
systemd[1]: iscsid.socket changed listening -> running
systemd[1]: Child 27674 belongs to iscsid.service
iscsid goes ahead and exists, as it was told to
systemd[1]: iscsid.service: main process exited, code=exited, status=0/SUCCESS
systemd[1]: Child 27679 belongs to iscsid.service
systemd[1]: iscsid.service: control process exited, code=exited status=0
systemd[1]: iscsid.service got final SIGCHLD for state stop
systemd[1]: iscsid.service changed stop -> dead
systemd[1]: iscsid.socket got notified about service death (failed
permanently: no)
systemd[1]: iscsid.socket changed running -> listening
systemd[1]: iscsid.service: cgroup is empty
iscsid[27674]: iscsid: iscsid shutting down.
but remember that start job that got enqueued
systemd[1]: Starting Open-iSCSI...
-- Subject: Unit iscsid.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit iscsid.service has begun starting up.
systemd[1]: About to execute: /usr/sbin/iscsid -f
systemd[1]: Forked /usr/sbin/iscsid as 27682
systemd[1]: iscsid.service changed dead -> running
systemd[1]: Job iscsid.service/start finished, result=done
systemd[1]: Started Open-iSCSI.
-- Subject: Unit iscsid.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit iscsid.service has finished starting up.
--
-- The start-up result is done.
systemd[1]: iscsid.socket changed listening -> running
systemd[27682]: Executing: /usr/sbin/iscsid -f
--
You received this message because you are subscribed to the Google Groups
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.