krallin / tini

A tiny but valid `init` for containers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

tini + jvm + nginx, signal to jvm kill nginx

mhagnumdw opened this issue · comments

Hi!

Sorry for the issue title, feel free to change

I've done a lot of research and haven't found a simple solution. I also don't want to leave the tini, like using an s6-overlay or supervisord. Thank you in advance for your help.

My container runs a jvm and a nginx. When I run a jvm diagnostic command, something like jcmd 8 VM.version, jvm receives a SIGQUIT and nginx too. The jvm continues to run as expected, but nginx is killed.

By monitoring the PID of the jvm and nginx with strace, it is possible to see both processes receiving the signal.

Below I gave an image that explains the whole scenario.

image

tini logs

[TRACE tini (1)] No child to reap
[TRACE tini (1)] No child to reap
[DEBUG tini (1)] Received SIGCHLD
[DEBUG tini (1)] Reaped child with pid: '14'
[TRACE tini (1)] No child to reap
[TRACE tini (1)] No child to reap

How can I get nginx to continue working after the jvm receives the diagnostic signal?

Thanks!

How can I get nginx to continue working after the jvm receives the diagnostic signal?

First, tini isn't meant to run multiple programs, it is not a full supervisor. The problem isn't that it should "keep running" , but that it should never get sent the SIGQUIT signal. Most likely jcmd is just sending the signal to the "process group" of the specified pid and not just the individual pid.