Any Start/Stop/Restart operation you issue creates a job that will
eventually (almost immediately, when starting a Type=simple service) get
completed (or fail) and trigger a JobRemoved signal containing the result.

When StartUnit/StopUnit/etc return they give you the job's object path you
need to check the incoming signals against to get the result of the job you
issued.

Type=simple services complete their Start job so quickly that you're
extremely unlikely to catch them on list-jobs.

On Mon, May 30, 2016 at 2:12 PM Adrien Besnard <adrien.besn...@gmail.com>
wrote:

> Thank you! I'll try that ASAP. Do I need to listen to JobRemoved because I
> use the [type=oneshot] or is it the way to do for every kind of service
> (like [type=simple], for example)?
>
> I'm asking that because I just dicovered that [systemctl list-jobs] lists
> my [type=oneshot] service when I start it, but I have no idea if it's
> related or not...
>
> Cheers,
>
> Adrien BESNARD
>
> 2016-05-26 11:59 GMT+02:00 Jan Alexander Steffens <jan.steff...@gmail.com>
> :
>
>> You need to listen to JobRemoved signals. All of them, before you start
>> your job - trying to match on the specific job you get back from StopUnit
>> might not complete before the job is already removed.
>>
>> On Thu, May 26, 2016 at 8:20 AM Adrien Besnard <adrien.besn...@gmail.com>
>> wrote:
>>
>>> I managed to do what I wanted to do using add_timeout with the GLib's
>>> MainLoop: I poll every second the state of the unit and manually call the
>>> callback connected to DBus to fake the event when the unit is stopped.
>>>
>>> It works but this is a dirty hack. So I'm still interested by a real
>>> solution :)
>>>
>>> Cheers!
>>> Le 23 mai 2016 11:55, "Adrien Besnard" <adrien.besn...@gmail.com> a
>>> écrit :
>>>
>>>> Hello,
>>>>
>>>> I'm trying to make a small Python script which send an email when a 
>>>> *Type=oneshot
>>>> *service ends (either in success or in failure).
>>>>
>>>> To do that, I'm using the dbus binding for Python, and connecting to
>>>> the *PropertiesChanged* signal on the unit I'm monitoring.
>>>>
>>>> It works great when the process fails (the signal is triggered and I
>>>> see *ActiveState* and *SubState* refleting the failure) but not when
>>>> the service end successully.
>>>>
>>>> All I see is an *UnitRemoved* signal triggered by the manager
>>>> interface... Is that normal?
>>>>
>>>> Do you guys have an idea of what I'm missing here?
>>>>
>>>> Thanks!
>>>> --
>>>> Adrien BESNARD
>>>>
>>> _______________________________________________
>>> systemd-devel mailing list
>>> systemd-devel@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/systemd-devel
>>>
>>
>
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to