[systemd-devel] Query regarding NOTIFY_SOCKET
Raghavendra. H. R
raghuhr84 at gmail.com
Tue Nov 8 14:38:55 UTC 2016
Does it mean that only services can notify systemd about their readiness
and systemd will not notify another service.
sd_notify call from *Myapp *of one.service is returning value '1'. So
one.service has successfully notified systemd that it is READY.
*But I observe second.service is not starting. I have given
NotifyAccess=all in one.service.*
One.service
========
*[Unit]*
*Description=one Sd_notify example*
*Before=second.service*
*[Service]*
*Type=notify*
*NotifyAccess=all*
*ExecStart=/etc/Myapp*
*[Install]*
*WantedBy=multi-user.target*
*Second.service*
*=========*
*[Unit]*
*Description=Second Sd_notify example*
*After=one.service*
*[Service]*
*ExecStart=/etc/Second_Myapp*
*[Install]*
*WantedBy=multi-user.target*
I dont see second.service starting after sd_notify is done from one.service.
Regards,
Raghavendra H R
--
Regards,
Raghavendra. H. R
(Raghu)
On Tue, Nov 8, 2016 at 7:47 PM, Alessandro Puccetti <alessandro at kinvolk.io>
wrote:
> I do not understand the relation between your question and service
> dependencies (e.g. Requires= and After= directives).
>
> Second is started when all the required services are ready, because of
> "Requires=one.service" second will be started after one's status is READY.
> Because one is Type=notify this state is not reached until one executes
> sd_notify(...).
>
>
> On Tue, Nov 8, 2016 at 2:59 PM, Raghavendra. H. R <raghuhr84 at gmail.com>
> wrote:
>
>> Just one last question.
>> Does systemd notifies other services based on this notification ?
>>
>
> In this case are the services to notify systemd not vice-versa and
> notifications are accepted by systemd for a specific service the depending
> on the value of Type= and NotifyAccess=.
>
>>
>> I have 2 service files, application in one service file sends
>> notification using sd_notify does systemd starts another service file.
>>
>> one.service
>> ========
>> *[Unit]*
>> *Description=Sd_notify example*
>> *Before=second.service*
>>
>> *[Service]*
>> *Type=notify*
>> *ExecStart=/etc/Myapp*
>>
> As I said before you may need to add "NotifyAccess=all" here.
>
>>
>> *[Install]*
>> *WantedBy=multi-user.target*
>>
>> second.service
>> ==========
>> *[Unit]*
>> *Description=Second sd_notify example*
>> *Requires=**one.service*
>> *After=one.service*
>>
>> *[Service]*
>> *ExecStart=/etc/SecondApp*
>>
>> *[Install]*
>> *WantedBy=multi-user.target*
>>
>>
>>
>> *Regards,*
>> *Raghavendra H R*
>>
>> --
>> Regards,
>>
>> Raghavendra. H. R
>> (Raghu)
>>
>> On Tue, Nov 8, 2016 at 7:14 PM, Alessandro Puccetti <
>> alessandro at kinvolk.io> wrote:
>>
>>>
>>>
>>> On Tue, Nov 8, 2016 at 2:28 PM, Raghavendra. H. R <raghuhr84 at gmail.com>
>>> wrote:
>>>
>>>> Hi Tomasz,
>>>>
>>>> Thanks for pointing out the mistake. I actually missed the line
>>>> "Type=notify" in the mail.
>>>> I found the journalctl logs and from that I can make out the real
>>>> problem is not about NOTIFY_SOCKET. It is about child process in my
>>>> application *Myapp.*
>>>>
>>>> Below given is my Service file.
>>>>
>>>> *[Unit]*
>>>> *Description=Sd_notify example*
>>>>
>>>> *[Service]*
>>>> *Type=notify*
>>>> *ExecStart=/etc/Myapp*
>>>>
>>>> *[Install]*
>>>> *WantedBy=multi-user.target*
>>>>
>>>> And in Myapp code my application is using fork() to create a child
>>>> process. Because of which notification is not working correctly.
>>>>
>>>> This is error log
>>>>
>>>>
>>>> *localhost systemd[1]: sd_example.service: Got notification message
>>>> from PID 1270, but reception only permitted for main PID 1106*
>>>>
>>>> Is there any way from which we can force sd_notify to make use of
>>>> Parent PID instead of child process. My sd_notify is after the fork() call,
>>>> so I doubt sd_notify is called from child process.
>>>>
>>>> MyApp code snippet
>>>>
>>>> *int count = 0;*
>>>> * cpid = fork();*
>>>>
>>>> * if (cpid < 0)*
>>>> * {*
>>>> * printf("vfork failed.");*
>>>> * }*
>>>>
>>>> * if (cpid == 0)*
>>>> * {*
>>>> * count++;*
>>>> * if(count == 1)*
>>>> * {*
>>>>
>>> This notificaiton is done by the child process, but notificaitons are
>>> accepted by default only form the main process. Read doc aobut
>>> "NotifyAccess=". https://www.freedesktop.org/software/system
>>> d/man/systemd.service.html#NotifyAccess=
>>>
>>>> * ret = sd_notify(0, "READY=1");*
>>>> * printf("Return value = %d \n");*
>>>> * }*
>>>> * }*
>>>>
>>>>
>>>> Regards,
>>>> Raghavendra H R
>>>>
>>>> --
>>>> Regards,
>>>>
>>>> Raghavendra. H. R
>>>> (Raghu)
>>>>
>>>> On Tue, Nov 8, 2016 at 5:15 PM, Tomasz Torcz <tomek at pipebreaker.pl>
>>>> wrote:
>>>>
>>>>> On Tue, Nov 08, 2016 at 05:01:59PM +0530, Raghavendra. H. R wrote:
>>>>> > Hi All,
>>>>> >
>>>>> > I'm a newbie in Systemd init system and I'm exploring sd_notify
>>>>> which is
>>>>> > basically used for notification purpose in SystemD.
>>>>>
>>>>> It is written “systemd” (all lowercase).
>>>>>
>>>>> > I have created one unit file which is of type "notify" and in my
>>>>> > application I have written sd_notify(0, "READY=1"); from which
>>>>> SystemD can
>>>>> > be notified that my process in totally up and running.
>>>>> >
>>>>> > Below given is my Service file.
>>>>> >
>>>>> > *[Unit]*
>>>>> > *Description=Sd_notify example*
>>>>> >
>>>>> > *[Service]*
>>>>> > *ExecStart=/etc/Myapp*
>>>>>
>>>>>
>>>>> This is not 'unit of type notify'. This is unit of type 'simple'.
>>>>> Please read "man systemd.service" and paragraph Type= and choose
>>>>> correctly.
>>>>>
>>>>>
>>>>> > Need help in understanding what value should be set in the
>>>>> environment
>>>>> > varaible NOTIFY_SOCKET.
>>>>> > But there's no much information/documentation available on
>>>>> NOTIFY_SOCKET.
>>>>>
>>>>> NOTIFY_SOCKET is filled-in by systemd and it is available when you
>>>>> correctly defined unit type. If you want to check it's value, you can
>>>>> user getenv() inside you program and print the value.
>>>>> I think amount of documentation about NOTIFY_SOCKET is enough, if
>>>>> you think there's something specific missing, let us know.
>>>>>
>>>>>
>>>>> --
>>>>> Tomasz Torcz "Never underestimate the bandwidth of a
>>>>> station
>>>>> xmpp: zdzichubg at chrome.pl wagon filled with backup tapes." -- Jim
>>>>> Gray
>>>>>
>>>>> _______________________________________________
>>>>> systemd-devel mailing list
>>>>> systemd-devel at lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/systemd-devel
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> systemd-devel mailing list
>>>> systemd-devel at lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/systemd-devel
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> Alessandro Puccetti
>>>
>>
>>
>
>
> --
>
> Alessandro Puccetti
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20161108/d1f9c3c5/attachment-0001.html>
More information about the systemd-devel
mailing list