Re: Uncontrolled generation of new processes

From: Colin Booth <colin_at_heliocat.net>
Date: Thu, 7 Dec 2017 06:09:08 +0000

On Wed, Dec 06, 2017 at 05:35:46PM +0100, DGSJ wrote:
> Hallo.
> In order to migrate my SistemV to Runit, I'm writing the service scripts,
> but I'm having a problem I can't solve.
All right, lets take a look!
>
> First, lest see an example that works well. The run file for the
> touchpad mouse:
>
> #!/bin/bash
> [ -f /etc/sysconfig/mouse ] && . /etc/sysconfig/mouse
> echo -e "Mouse working (ratonpad)..."
> exec /usr/sbin/gpm -D -m "${MDEVICE}" -t "${PROTOCOL}" ${GPMOPTS} > /dev/null 2>&1
>
> An this is how the processes and PID's look like.
> # ps -fx
> 1 ? Ss 0:00 runit
> 192 ? Ss 0:00 runsvdir -P /service log: ..................
> .....................................................................
> 194 ? Ss 0:00 \_ runsv ratonpad
> 198 ? S 0:00 | \_ /usr/sbin/gpm -D -m /dev/input/mice -t imps2
>
> This kind of run file seems to work fine with daemons like gpm, sysklogd
> syslogd...
>
> But when I try to make the same with other services like udev, something
> goes wrong.
>
> This is the run file:
> #!/bin/bash -e
> echo "daemon udevd"
> exec 2>&1
> exec /sbin/udevd --daemon
>
> And this is what happens:
> 466 ? Ss 0:00 /sbin/udevd --daemon
> 470 ? Ss 0:00 /sbin/udevd --daemon
> 474 ? Ss 0:00 /sbin/udevd --daemon
> 478 ? Ss 0:00 /sbin/udevd --daemon
> 484 ? Ss 0:00 /sbin/udevd --daemon
> 488 ? Ss 0:00 /sbin/udevd --daemon
> 492 ? Ss 0:00 /sbin/udevd --daemon
> 496 ? Ss 0:00 /sbin/udevd --daemon
>
> The processes doesn't fit into the typical runsv tree, and every one second
> a new PID is created on and on.
>
> What can be wrong?
systemd-udevd(8) says: --daemon Detach and run in the background.

The main thing about supervision is that things shouldn't background
themselves, otherwise the supervisor loses track of it and spawns a new
copy. Dropping the `--daemon' should fix it.
>
> With other more elaborated run files, for services different than daemons,
> it happens more or less the same. Let see the behaviour of this
> interesting template I have found.
>
> This is the run file.
> #!/bin/bash -e
> echo -e "-------------"
> exec 2>&1
> exec /opt/example2/foo-service.sh
>
> This is the script for the foo-service.sh
> #!/bin/bash -e
> echo "Empieza el servicio...root (service begins)"
> for i in {1..2}
> do
> echo "haciendo cosas...root (making things...)"
> sleep 1
> done
>
> It doesn't matter if you end the script with exit 1 o 0, the result,
> regarding the uncontrolled creation of PID's is the same.
>
> This is the output of ps -fx
>
> 197 ? Ss 0:00 \_ runsv example2
> 820 ? S 0:00 \_ /bin/bash -e /opt/example2/foo-service.sh
> 821 ? S 0:00 \_ sleep 1
>
> It looks nice, but after a while:
> 197 ? Ss 0:00 \_ runsv example2
> 989 ? S 0:00 \_ /bin/bash -e /opt/example2/foo-service.sh
> 991 ? S 0:00 \_ sleep 1
This is a matter of confusion on the part of the user. ./run is being
replaced via exec with foo-service.sh, a program that does three things:
echoes some stuff, forks a one-second sleep, and then exits. Once it
exits, the supervisor (runsv) will re-launch it.
>
> Old processes are killed, and new ones created every second
> 820 - 821 --> 989 - 991.
>
> Another view with pstree.
> |-runsvdir-+-runsv---login---bash---
> | |
> | |-runsv---gpm
> | |-runsv---syslogd
> | |-runsv-+-klogd
> | | `-run---svlogd
> | `-runsv---foo-service.sh---sleep
>
>
> Well, I think I've missed something...
>
> It seems that every time the service is controlled, at the same time the
> process is recreated again and again with increasing PIDs.
> What am I doing wrong?
In your test case, the design of foo-service.sh is the problem. If you
replaced `for i in {1..2} ; do' with `while : ; do' the script will
never actually terminate and foo-service.sh will be properly supervised.
>
> I'm very interested in using runit for controlling other services different
> than daemons, so any help will be welcomed.
The only rules are: it has to not background/detatch/whatever, and when
it terminates it'll get re-launched.
>
> Thank you in advance for your help.
Cheers!
> --
> -------------------------
> Daniel Gutiérrez San José

-- 
Colin Booth
Received on Thu Dec 07 2017 - 06:09:08 UTC

This archive was generated by hypermail 2.3.0 : Sun May 09 2021 - 19:44:19 UTC