[systemd-devel] question about socket activation
Lennart Poettering
lennart at poettering.net
Wed Jan 24 11:01:42 UTC 2018
On Fr, 29.12.17 17:19, eshark (eshark77 at 163.com) wrote:
> Hi, All
> I tried to test the socket activation by a simple foobar.socket and foobar.service, which are as the following:
> foobar.socket:
> [Socket]
> ListenStream=/dev/socket/foobar
>
>
> [Install]
> WantedBy=sockets.target
>
>
> foobar.service:
> [Service]
> Type=simple
> ExecStart=/usr/bin/test-socket
> Restart=no
>
>
> I also wrote a simple program to connect to /dev/socket/foobar , in order to activitate the foobar.service.
> When I ran the program, the foobar.service was started by systemd , and the foobar.socket changed from 'listening' state to 'running' state.
> All works OK as expected, but when I killed the test-socket, it was started again by the systemd, even if I didn't run my program.
> And from the system journal logs , I found that
> "
> Line 2035: 31,29604,571630004,-;systemd[1]: foobar.socket got notified about service death (failed permanently: no)
> Line 2038: 31,29605,571630065,-;systemd[1]: foobar.socket changed running -> listening
> Line 2050: 31,29609,571632385,-;systemd[1]: Incoming traffic on foobar.socket
> Line 2056: 28,29611,571633087,-;systemd[1]: Cannot add dependency job for unit systemd-bus-proxyd.socket, ignoring: Unit systemd-bus-proxyd.socket failed to load: No such file or directory.
> Line 2056: 28,29611,571633087,-;systemd[1]: Cannot add dependency job for unit systemd-bus-proxyd.socket, ignoring: Unit systemd-bus-proxyd.socket failed to load: No such file or directory.
> Line 2065: 31,29614,571633544,-;systemd[1]: foobar.socket changed listening -> running
> "
> It seems that immediately after the death of foobar.service, some unknown incoming traffic on foobar.socket made the foobar.service started again by the systemd .
> Could anyone give me some suggestion that who connected to the foobar.socket ? Any idea about how to debug this problem is very appreciated.
If your service is activated due to incoming traffic and you do not
process the incoming traffic and exit, then you will be started
immediately again, as the socket still has traffic queued.
The idea is usually to process everything queued up on the listening
socket, and then exit until the next incoming traffic.
If you never accept any of the incoming connections you hence will
make systemd busy loop around your service.
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list