May 23 10:52:11 b1 systemd[1]: Starting iSCSI initiator daemon (iscsid)...
May 23 10:52:11 b1 systemd[1]: iscsid.service: Failed to parse PID from file /run/iscsid.pid: Invalid argument
May 23 10:52:11 b1 iscsid[754]: iSCSI daemon with pid=759 started!
May 23 10:52:11 b1 systemd[1]: Started iSCSI initiator daemon (iscsid).
● open-iscsi.service - Login to default iSCSI targets
Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Wed 2018-05-23 10:52:11 UTC; 7min ago
├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
└─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
Docs: man:iscsiadm(8) man:iscsid(8)
It is important to note that these are not "the same" service twice.
both belong to the same package:
dpkg -S /lib/systemd/system/open-iscsi.service /lib/systemd/system/iscsid.service
open-iscsi: /lib/systemd/system/open-iscsi.service
open-iscsi: /lib/systemd/system/iscsid.service
But the two are doing rather different things:
open-iscsi.service: logs into iSCSI targets if some are configured (Condition stops it from doing so) - this is more a one-shot configure-devices and not a real service
iscsi.service: the basic service daemone, required by the service above
I think here we might learn from Fedora:
Default is:
[root@fedora ~]# systemctl status iscsid.socket iscsid.service
● iscsid.socket - Open-iSCSI iscsid Socket
Loaded: loaded (/usr/lib/systemd/system/iscsid.socket; enabled; vendor preset: disabled)
Active: active (listening) since Wed 2018-05-23 11:26:37 UTC; 9s ago
Docs: man:iscsid(8) man:iscsiadm(8)
Listen: @ISCSIADM_ABSTRACT_NAMESPACE (Stream)
May 23 11:26:37 fedora systemd[1]: Listening on Open-iSCSI iscsid Socket.
May 23 11:26:09 fedora systemd[1]: iscsid.service: Failed to reset devices.list: Operation not permitted
May 23 11:26:09 fedora systemd[1]: Starting Open-iSCSI...
And the related config in /etc/iscsid.conf says:
# Use socket activation, but try to make sure the socket units are listening
iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
(We don't have the uio, but you get the idea - initially only ensure the socket runs.)
The socket then does:
# systemctl cat iscsid.socket
# /usr/lib/systemd/system/iscsid.socket
[Unit]
Description=Open-iSCSI iscsid Socket
Documentation=man:iscsid(8) man:iscsiadm(8)
The tools will reach that and activate the service:
# surely fails and does nothing, but activates the service
$ iscsiadm -m discovery -t st -p 1.2.3.4
Afterwards:
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2018-05-23 11:30:41 UTC; 7s ago
So far our logic is inverse:
1. we start iscsid always
2. we pre-check if it is starte din open-iscsid
ExecStartPre=/bin/systemctl --quiet is-active iscsid.service
Status of a clean install in a VM and/or Container, so testable rather trivial:
$ systemctl status iscsid open-iscsi system/ iscsid. service; enabled; vendor preset: enabled) /sbin/iscsid (code=exited, status=0/SUCCESS) /lib/open- iscsi/startup- checks. sh (code=exited, status=0/SUCCESS) slice/iscsid. service
● iscsid.service - iSCSI initiator daemon (iscsid)
Loaded: loaded (/lib/systemd/
Active: active (running) since Wed 2018-05-23 10:52:11 UTC; 7min ago
Docs: man:iscsid(8)
Process: 751 ExecStart=
Process: 721 ExecStartPre=
Main PID: 759 (iscsid)
Tasks: 2 (limit: 548)
CGroup: /system.
├─754 /sbin/iscsid
└─759 /sbin/iscsid
May 23 10:52:11 b1 systemd[1]: Starting iSCSI initiator daemon (iscsid)...
May 23 10:52:11 b1 systemd[1]: iscsid.service: Failed to parse PID from file /run/iscsid.pid: Invalid argument
May 23 10:52:11 b1 iscsid[754]: iSCSI daemon with pid=759 started!
May 23 10:52:11 b1 systemd[1]: Started iSCSI initiator daemon (iscsid).
● open-iscsi.service - Login to default iSCSI targets system/ open-iscsi. service; enabled; vendor preset: enabled) oryNotEmpty= |/etc/iscsi/ nodes was not met oryNotEmpty= |/sys/class/ iscsi_session was not met
man: iscsid( 8)
Loaded: loaded (/lib/systemd/
Active: inactive (dead)
Condition: start condition failed at Wed 2018-05-23 10:52:11 UTC; 7min ago
├─ ConditionDirect
└─ ConditionDirect
Docs: man:iscsiadm(8)
It is important to note that these are not "the same" service twice. system/ open-iscsi. service /lib/systemd/ system/ iscsid. service system/ open-iscsi. service system/ iscsid. service
both belong to the same package:
dpkg -S /lib/systemd/
open-iscsi: /lib/systemd/
open-iscsi: /lib/systemd/
But the two are doing rather different things:
open-iscsi.service: logs into iSCSI targets if some are configured (Condition stops it from doing so) - this is more a one-shot configure-devices and not a real service
iscsi.service: the basic service daemone, required by the service above
I think here we might learn from Fedora: systemd/ system/ iscsid. socket; enabled; vendor preset: disabled)
man: iscsiadm( 8) ABSTRACT_ NAMESPACE (Stream)
Default is:
[root@fedora ~]# systemctl status iscsid.socket iscsid.service
● iscsid.socket - Open-iSCSI iscsid Socket
Loaded: loaded (/usr/lib/
Active: active (listening) since Wed 2018-05-23 11:26:37 UTC; 9s ago
Docs: man:iscsid(8)
Listen: @ISCSIADM_
May 23 11:26:37 fedora systemd[1]: Listening on Open-iSCSI iscsid Socket.
● iscsid.service - Open-iSCSI systemd/ system/ iscsid. service; disabled; vendor preset: disabled)
man: iscsiadm( 8)
Loaded: loaded (/usr/lib/
Active: inactive (dead)
Docs: man:iscsid(8)
May 23 11:26:09 fedora systemd[1]: iscsid.service: Failed to reset devices.list: Operation not permitted
May 23 11:26:09 fedora systemd[1]: Starting Open-iSCSI...
And the related config in /etc/iscsid.conf says:
# Use socket activation, but try to make sure the socket units are listening
iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
(We don't have the uio, but you get the idea - initially only ensure the socket runs.)
The socket then does: systemd/ system/ iscsid. socket Open-iSCSI iscsid Socket man:iscsid( 8) man:iscsiadm(8)
# systemctl cat iscsid.socket
# /usr/lib/
[Unit]
Description=
Documentation=
[Socket] @ISCSIADM_ ABSTRACT_ NAMESPACE
ListenStream=
[Install] sockets. target
WantedBy=
The tools will reach that and activate the service:
# surely fails and does nothing, but activates the service
$ iscsiadm -m discovery -t st -p 1.2.3.4
Afterwards: systemd/ system/ iscsid. service; disabled; vendor preset: disabled)
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/
Active: active (running) since Wed 2018-05-23 11:30:41 UTC; 7s ago
So far our logic is inverse: =/bin/systemctl --quiet is-active iscsid.service
1. we start iscsid always
2. we pre-check if it is starte din open-iscsid
ExecStartPre