krallin / tini

A tiny but valid `init` for containers
MIT License
9.82k stars 507 forks source link

feature: tcp socket handler and app restart #155

Closed sergey-safarov closed 3 years ago

sergey-safarov commented 4 years ago

I use application that utilize systemd sockets feature. If for some reason app is dies, then app restart and all connected clients reattached to app.

Could you add feature: 1) tcp socket handler and socket propagation to child process (like systemd); 2) application process restarting if child process dies.

tianon commented 4 years ago

I believe systemd-socket-activate might be able to accomplish what you're looking for (https://www.freedesktop.org/software/systemd/man/systemd-socket-activate.html).

sergey-safarov commented 4 years ago

Thanks, this must works.

I also make search for required libs to start systemd-socket-activate and looks use need many libs. For me that not good.

[root@safarov-server ~]# ldd /usr/bin/systemd-socket-activate
    linux-vdso.so.1 (0x00007ffc931e7000)
    libsystemd-shared-239.so => /usr/lib/systemd/libsystemd-shared-239.so (0x00007fe57aacc000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe57a8b4000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe57a694000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fe57a2d1000)
    librt.so.1 => /lib64/librt.so.1 (0x00007fe57a0c8000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007fe579ec2000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007fe579cb9000)
    libcryptsetup.so.12 => /lib64/libcryptsetup.so.12 (0x00007fe579a45000)
    libgcrypt.so.20 => /lib64/libgcrypt.so.20 (0x00007fe579729000)
    libip4tc.so.0 => /lib64/libip4tc.so.0 (0x00007fe579521000)
    libseccomp.so.2 => /lib64/libseccomp.so.2 (0x00007fe5792da000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe5790af000)
    libidn2.so.0 => /lib64/libidn2.so.0 (0x00007fe578e91000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fe578c6a000)
    liblz4.so.1 => /lib64/liblz4.so.1 (0x00007fe578a53000)
    libblkid.so.1 => /lib64/libblkid.so.1 (0x00007fe578801000)
    libmount.so.1 => /lib64/libmount.so.1 (0x00007fe5785a7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe57b15e000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007fe5783a1000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fe578199000)
    libdevmapper.so.1.02 => /lib64/libdevmapper.so.1.02 (0x00007fe577f40000)
    libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007fe577cac000)
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fe5777ce000)
    libjson-c.so.4 => /lib64/libjson-c.so.4 (0x00007fe5775be000)
    libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fe57739d000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fe577199000)
    libpcap.so.1 => /lib64/libpcap.so.1 (0x00007fe576f53000)
    libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fe576ccf000)
    libunistring.so.2 => /lib64/libunistring.so.2 (0x00007fe57694e000)
    libsepol.so.1 => /lib64/libsepol.so.1 (0x00007fe57669c000)
    libudev.so.1 => /lib64/libudev.so.1 (0x00007fe576475000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fe5760f3000)
    libz.so.1 => /lib64/libz.so.1 (0x00007fe575edc000)

Also when i create image using alpine dist, then this approach cannot be used because alpine not have systemd.

Any way, thanks for idea. You are free close ticket.