[systemd-devel] unit been dead before been running
aleivag
aleivag at gmail.com
Mon Feb 18 21:46:58 UTC 2019
Hi All:
i notice a change of behaviour that broke a couple of my scripts between
v239 and v240, and wanted to know that maybe i was always assuming the
wrong thing, so here it goes:
so i subscribe to
"type='signal',"
"sender='org.freedesktop.systemd1',"
"path='/org/freedesktop/systemd1/unit/myu_2eservice',"
"interface='org.freedesktop.DBus.Properties',"
"member='PropertiesChanged'"
on the bus, and then i start a transient unit like `systemd-run --pty
--unit myu.service /bin/bash` .
to do the subscribe to that event i use the following script, (its
definitely not important the script i use but just show you for
completeness),
```
#!/usr/bin/python3
from pprint import pprint
import pystemd
from pystemd.dbuslib import DBus
with DBus() as bus, pystemd.DBus.Manager(bus=bus, _autoload=True) as man:
mstr = (
"type='signal',"
"sender='org.freedesktop.systemd1',"
"path='/org/freedesktop/systemd1/unit/myu_2eservice',"
"interface='org.freedesktop.DBus.Properties',"
"member='PropertiesChanged'"
).encode()
man.Monitoring.BecomeMonitor([mstr], 0)
while True:
bus.wait(1000)
m = bus.process()
if m.is_empty():
continue
m.process_reply(False)
if m.get_path() == b'/org/freedesktop/systemd1/unit/myu_2eservice':
pprint(m.body)
```
on systemd v239 and bellow before the unit is active i got only 2 messages,
one `org.freedesktop.systemd1.Service` and one on
`org.freedesktop.systemd1.Unit`. the second one notify me that the
"SubState" is "running". when the unit ends, i get 2 messages also, and the
last one is to tell me that the "SubState" is "dead"
on v240 on the other part, before the unit ready, i get 4 messages, one on
`org.freedesktop.systemd1.Service` -> `org.freedesktop.systemd1.Unit` ->
`org.freedesktop.systemd1.Service` -> `org.freedesktop.systemd1.Unit`,
where the Unit ones the substate first is "dead" and then is "running", on
deactivating, the messages are the same between 239 and 240.
so i used to tell that the unit had finished, by inspecting the messages on
the bus, and then looking for SubState to be any of ("exited", "failed",
"dead"), but i cant do that now.
at the end of the email i copy the dumps on the 2 versions, but my
questions are:
1.- Is this change in behaviour, intended, or a side effect of something
else?
2.- was what i was doing the best way to decide if a transient unit has
finished? i'm super temped to instead check when the
`org.freedesktop.systemd1.Service.MainPID == 0` i think its the best idea,
but maybe you guys have one that is better.
thanks guys!!
now i paste the messages:
on v239
on start
[b'org.freedesktop.systemd1.Service',
{b'ControlPID': 0,
b'ExecMainCode': 0,
b'ExecMainExitTimestamp': 0,
b'ExecMainExitTimestampMonotonic': 0,
b'ExecMainPID': 18328,
b'ExecMainStartTimestamp': 1550516822984246,
b'ExecMainStartTimestampMonotonic': 41004687391,
b'ExecMainStatus': 0,
b'GID': 4294967295,
b'MainPID': 18328,
b'NRestarts': 0,
b'Result': b'success',
b'StatusErrno': 0,
b'StatusText': b'',
b'UID': 4294967295,
b'USBFunctionDescriptors': b'',
b'USBFunctionStrings': b''},
[b'ExecStartPre',
b'ExecStart',
b'ExecStartPost',
b'ExecReload',
b'ExecStop',
b'ExecStopPost']]
[b'org.freedesktop.systemd1.Unit',
{b'ActiveEnterTimestamp': 1550516822984291,
b'ActiveEnterTimestampMonotonic': 41004687437,
b'ActiveExitTimestamp': 0,
b'ActiveExitTimestampMonotonic': 0,
b'ActiveState': b'active',
b'AssertResult': True,
b'AssertTimestamp': 1550516822983511,
b'AssertTimestampMonotonic': 41004686656,
b'ConditionResult': True,
b'ConditionTimestamp': 1550516822983509,
b'ConditionTimestampMonotonic': 41004686655,
b'InactiveEnterTimestamp': 0,
b'InactiveEnterTimestampMonotonic': 0,
b'InactiveExitTimestamp': 1550516822984291,
b'InactiveExitTimestampMonotonic': 41004687437,
b'Job': (0, b'/'),
b'StateChangeTimestamp': 1550516822984291,
b'StateChangeTimestampMonotonic': 41004687437,
b'SubState': b'running'},
[]]
on end
[b'org.freedesktop.systemd1.Service',
{b'ControlPID': 0,
b'ExecMainCode': 1,
b'ExecMainExitTimestamp': 1550516877103509,
b'ExecMainExitTimestampMonotonic': 41058806656,
b'ExecMainPID': 18328,
b'ExecMainStartTimestamp': 1550516822984246,
b'ExecMainStartTimestampMonotonic': 41004687391,
b'ExecMainStatus': 0,
b'GID': 4294967295,
b'MainPID': 0,
b'NRestarts': 0,
b'Result': b'success',
b'StatusErrno': 0,
b'StatusText': b'',
b'UID': 4294967295,
b'USBFunctionDescriptors': b'',
b'USBFunctionStrings': b''},
[b'ExecStartPre',
b'ExecStart',
b'ExecStartPost',
b'ExecReload',
b'ExecStop',
b'ExecStopPost']]
[b'org.freedesktop.systemd1.Unit',
{b'ActiveEnterTimestamp': 1550516822984291,
b'ActiveEnterTimestampMonotonic': 41004687437,
b'ActiveExitTimestamp': 1550516877103599,
b'ActiveExitTimestampMonotonic': 41058806745,
b'ActiveState': b'inactive',
b'AssertResult': True,
b'AssertTimestamp': 1550516822983511,
b'AssertTimestampMonotonic': 41004686656,
b'ConditionResult': True,
b'ConditionTimestamp': 1550516822983509,
b'ConditionTimestampMonotonic': 41004686655,
b'InactiveEnterTimestamp': 1550516877103599,
b'InactiveEnterTimestampMonotonic': 41058806745,
b'InactiveExitTimestamp': 1550516822984291,
b'InactiveExitTimestampMonotonic': 41004687437,
b'Job': (0, b'/'),
b'StateChangeTimestamp': 1550516877103599,
b'StateChangeTimestampMonotonic': 41058806745,
b'SubState': b'dead'},
[]]
and on v240, on activating (please notice 4 message)
```
[b'org.freedesktop.systemd1.Service',
{b'ControlPID': 0,
b'ExecMainCode': 0,
b'ExecMainExitTimestamp': 0,
b'ExecMainExitTimestampMonotonic': 0,
b'ExecMainPID': 7133,
b'ExecMainStartTimestamp': 1550515398840688,
b'ExecMainStartTimestampMonotonic': 1922045814,
b'ExecMainStatus': 0,
b'GID': 4294967295,
b'MainPID': 7133,
b'NRestarts': 0,
b'Result': b'success',
b'StatusErrno': 0,
b'StatusText': b'',
b'UID': 4294967295},
[b'ExecStartPre',
b'ExecStart',
b'ExecStartPost',
b'ExecReload',
b'ExecStop',
b'ExecStopPost']]
[b'org.freedesktop.systemd1.Unit',
{b'ActiveEnterTimestamp': 0,
b'ActiveEnterTimestampMonotonic': 0,
b'ActiveExitTimestamp': 0,
b'ActiveExitTimestampMonotonic': 0,
b'ActiveState': b'inactive',
b'AssertResult': True,
b'AssertTimestamp': 1550515398840037,
b'AssertTimestampMonotonic': 1922045163,
b'ConditionResult': True,
b'ConditionTimestamp': 1550515398840035,
b'ConditionTimestampMonotonic': 1922045161,
b'InactiveEnterTimestamp': 0,
b'InactiveEnterTimestampMonotonic': 0,
b'InactiveExitTimestamp': 0,
b'InactiveExitTimestampMonotonic': 0,
b'InvocationID': [249,
205,
238,
134,
209,
51,
64,
133,
164,
25,
160,
192,
70,
197,
1,
112],
b'Job': (903, b'/org/freedesktop/systemd1/job/903'),
b'StateChangeTimestamp': 0,
b'StateChangeTimestampMonotonic': 0,
b'SubState': b'dead'},
[b'Conditions', b'Asserts']]
[b'org.freedesktop.systemd1.Service',
{b'ControlPID': 0,
b'ExecMainCode': 0,
b'ExecMainExitTimestamp': 0,
b'ExecMainExitTimestampMonotonic': 0,
b'ExecMainPID': 7133,
b'ExecMainStartTimestamp': 1550515398840688,
b'ExecMainStartTimestampMonotonic': 1922045814,
b'ExecMainStatus': 0,
b'GID': 4294967295,
b'MainPID': 7133,
b'NRestarts': 0,
b'Result': b'success',
b'StatusErrno': 0,
b'StatusText': b'',
b'UID': 4294967295},
[b'ExecStartPre',
b'ExecStart',
b'ExecStartPost',
b'ExecReload',
b'ExecStop',
b'ExecStopPost']]
[b'org.freedesktop.systemd1.Unit',
{b'ActiveEnterTimestamp': 1550515398840853,
b'ActiveEnterTimestampMonotonic': 1922045979,
b'ActiveExitTimestamp': 0,
b'ActiveExitTimestampMonotonic': 0,
b'ActiveState': b'active',
b'AssertResult': True,
b'AssertTimestamp': 1550515398840037,
b'AssertTimestampMonotonic': 1922045163,
b'ConditionResult': True,
b'ConditionTimestamp': 1550515398840035,
b'ConditionTimestampMonotonic': 1922045161,
b'InactiveEnterTimestamp': 0,
b'InactiveEnterTimestampMonotonic': 0,
b'InactiveExitTimestamp': 1550515398840853,
b'InactiveExitTimestampMonotonic': 1922045979,
b'InvocationID': [249,
205,
238,
134,
209,
51,
64,
133,
164,
25,
160,
192,
70,
197,
1,
112],
b'Job': (903, b'/org/freedesktop/systemd1/job/903'),
b'StateChangeTimestamp': 1550515398840853,
b'StateChangeTimestampMonotonic': 1922045979,
b'SubState': b'running'},
[b'Conditions', b'Asserts']]
```
and on the way out
```
[b'org.freedesktop.systemd1.Service',
{b'ControlPID': 0,
b'ExecMainCode': 1,
b'ExecMainExitTimestamp': 1550515593404243,
b'ExecMainExitTimestampMonotonic': 2116609370,
b'ExecMainPID': 7133,
b'ExecMainStartTimestamp': 1550515398840688,
b'ExecMainStartTimestampMonotonic': 1922045814,
b'ExecMainStatus': 0,
b'GID': 4294967295,
b'MainPID': 0,
b'NRestarts': 0,
b'Result': b'success',
b'StatusErrno': 0,
b'StatusText': b'',
b'UID': 4294967295},
[b'ExecStartPre',
b'ExecStart',
b'ExecStartPost',
b'ExecReload',
b'ExecStop',
b'ExecStopPost']]
[b'org.freedesktop.systemd1.Unit',
{b'ActiveEnterTimestamp': 1550515398840853,
b'ActiveEnterTimestampMonotonic': 1922045979,
b'ActiveExitTimestamp': 1550515593404360,
b'ActiveExitTimestampMonotonic': 2116609486,
b'ActiveState': b'inactive',
b'AssertResult': True,
b'AssertTimestamp': 1550515398840037,
b'AssertTimestampMonotonic': 1922045163,
b'ConditionResult': True,
b'ConditionTimestamp': 1550515398840035,
b'ConditionTimestampMonotonic': 1922045161,
b'InactiveEnterTimestamp': 1550515593404360,
b'InactiveEnterTimestampMonotonic': 2116609486,
b'InactiveExitTimestamp': 1550515398840853,
b'InactiveExitTimestampMonotonic': 1922045979,
b'InvocationID': [249,
205,
238,
134,
209,
51,
64,
133,
164,
25,
160,
192,
70,
197,
1,
112],
b'Job': (0, b'/'),
b'StateChangeTimestamp': 1550515593404360,
b'StateChangeTimestampMonotonic': 2116609486,
b'SubState': b'dead'},
[b'Conditions', b'Asserts']]
```
Alvaro Leiva
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20190218/fc8624c9/attachment-0001.html>
More information about the systemd-devel
mailing list