Skip to content

Conversation

@sundbry
Copy link
Contributor

@sundbry sundbry commented Nov 23, 2017

This prevents SIGINT from a user interrupt from prematurely quitting syslog-ng.
Re: Issue #450 and PR #447

From the bash manual:

-m      Monitor mode.  Job control is enabled.  This option is on by default for interactive shells on systems that support it (see JOB CONTROL above).  Back-
                      ground processes run in a separate process group and a line containing their exit status is printed upon their completion.

When an interactive docker tty receives SIGINT, it forwards the signal to all processes in the tty's process group (https://www.cs.ucsb.edu/~almeroth/classes/W99.276/assignment1/signals.html). By forking syslog-ng into it's own process group with bash monitor mode, this prevents the SIGINT sent to the tty from being sent to syslog-ng, and the normal shutdown procedure is then able to shutdown syslog-ng at the appropriate point in the sequence.

This prevents SIGINT from a user interrupt from prematurely quitting syslog-ng.
See phusion#450
@Theaxiom Theaxiom added this to the 0.10.0 milestone Nov 23, 2017
@Theaxiom
Copy link
Collaborator

@sundbry have you tested this?

@sundbry
Copy link
Contributor Author

sundbry commented Nov 23, 2017

@Theaxiom Yes, tried it with ctrl c, and a normal kill with docker stop

Using the same logger.py from #447

Kill with ctrl-c

docker run -ti --rm --name test -v $(pwd)/test/logger.py:/etc/my_init.d/logger.py phusion/baseimage:0.9.22
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/my_init.d/10_syslog-ng.init...
Nov 23 18:06:17 03e724a5c2f1 syslog-ng[11]: syslog-ng starting up; version='3.5.6'
Nov 23 18:06:17 03e724a5c2f1 syslog-ng[11]: WARNING: you are using the pipe driver, underlying file is not a FIFO, it should be used by file(); filename='/dev/stdout'
Nov 23 18:06:18 03e724a5c2f1 syslog-ng[11]: EOF on control channel, closing connection;
*** Running /etc/my_init.d/logger.py...
[18:06:18.700637] Starting
[18:06:18.701101] Ping
Nov 23 18:06:18 03e724a5c2f1 /logger.py[16]: [18:06:18.700637] Starting
Nov 23 18:06:18 03e724a5c2f1 /logger.py[16]: [18:06:18.701101] Ping
[18:06:18.954699] Ping
Nov 23 18:06:18 03e724a5c2f1 /logger.py[16]: [18:06:18.954699] Ping
[18:06:19.206189] Ping
Nov 23 18:06:19 03e724a5c2f1 /logger.py[16]: [18:06:19.206189] Ping
[18:06:19.458966] Ping
Nov 23 18:06:19 03e724a5c2f1 /logger.py[16]: [18:06:19.458966] Ping
[18:06:19.709795] Ping
Nov 23 18:06:19 03e724a5c2f1 /logger.py[16]: [18:06:19.709795] Ping
[18:06:19.960832] Ping
Nov 23 18:06:19 03e724a5c2f1 /logger.py[16]: [18:06:19.960832] Ping
^C[18:06:20.056618] Caught signal SIGINT, ignoring.
*** An error occurred. Aborting.
*** Shutting down /etc/my_init.d/logger.py (PID 16)...
[18:06:20.057728] Caught signal SIGTERM, ignoring.
[18:06:20.211411] Ping
Nov 23 18:06:20 03e724a5c2f1 /logger.py[16]: [18:06:20.211411] Ping
[18:06:20.467293] Ping
Nov 23 18:06:20 03e724a5c2f1 /logger.py[16]: [18:06:20.467293] Ping
[18:06:20.719701] Ping
Nov 23 18:06:20 03e724a5c2f1 /logger.py[16]: [18:06:20.719701] Ping
Nov 23 18:06:20 03e724a5c2f1 /logger.py[16]: [18:06:20.975677] Ping
[18:06:21.228114] Ping
Nov 23 18:06:21 03e724a5c2f1 /logger.py[16]: [18:06:21.228114] Ping
[18:06:21.484098] Ping
Nov 23 18:06:21 03e724a5c2f1 /logger.py[16]: [18:06:21.484098] Ping
[18:06:21.736382] Ping
Nov 23 18:06:21 03e724a5c2f1 /logger.py[16]: [18:06:21.736382] Ping
[18:06:21.988131] Ping
Nov 23 18:06:21 03e724a5c2f1 /logger.py[16]: [18:06:21.988131] Ping
[18:06:22.241186] Ping
Nov 23 18:06:22 03e724a5c2f1 /logger.py[16]: [18:06:22.241186] Ping
[18:06:22.497227] Ping
Nov 23 18:06:22 03e724a5c2f1 /logger.py[16]: [18:06:22.497227] Ping
[18:06:22.749091] Ping
Nov 23 18:06:22 03e724a5c2f1 /logger.py[16]: [18:06:22.749091] Ping
[18:06:22.999930] Ping
Nov 23 18:06:22 03e724a5c2f1 /logger.py[16]: [18:06:22.999930] Ping
[18:06:23.250688] Ping
Nov 23 18:06:23 03e724a5c2f1 /logger.py[16]: [18:06:23.250688] Ping
[18:06:23.501774] Ping
Nov 23 18:06:23 03e724a5c2f1 /logger.py[16]: [18:06:23.501774] Ping
[18:06:23.753184] Ping
Nov 23 18:06:23 03e724a5c2f1 /logger.py[16]: [18:06:23.753184] Ping
[18:06:24.003949] Ping
Nov 23 18:06:23 03e724a5c2f1 /logger.py[16]: [18:06:24.003949] Ping
[18:06:24.255745] Ping
Nov 23 18:06:24 03e724a5c2f1 /logger.py[16]: [18:06:24.255745] Ping
[18:06:24.511514] Ping
Nov 23 18:06:24 03e724a5c2f1 /logger.py[16]: [18:06:24.511514] Ping
[18:06:24.766227] Ping
Nov 23 18:06:24 03e724a5c2f1 /logger.py[16]: [18:06:24.766227] Ping
[18:06:25.018023] Ping
Nov 23 18:06:25 03e724a5c2f1 /logger.py[16]: [18:06:25.018023] Ping
*** /etc/my_init.d/logger.py (PID 16) did not shut down in time. Forcing it to exit.
*** Init system aborted.
*** Killing all processes...
Nov 23 18:06:25 03e724a5c2f1 syslog-ng[11]: syslog-ng shutting down; version='3.5.6'

Kill with docker stop

docker run -ti --rm --name test -v $(pwd)/test/logger.py:/etc/my_init.d/logger.py phusion/baseimage:0.9.22
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/my_init.d/10_syslog-ng.init...
Nov 23 18:08:10 a22ed876faec syslog-ng[11]: syslog-ng starting up; version='3.5.6'
Nov 23 18:08:10 a22ed876faec syslog-ng[11]: WARNING: you are using the pipe driver, underlying file is not a FIFO, it should be used by file(); filename='/dev/stdout'
Nov 23 18:08:11 a22ed876faec syslog-ng[11]: EOF on control channel, closing connection;
*** Running /etc/my_init.d/logger.py...
[18:08:11.941126] Starting
Nov 23 18:08:11 a22ed876faec /logger.py[16]: [18:08:11.941126] Starting
[18:08:11.941924] Ping
Nov 23 18:08:11 a22ed876faec /logger.py[16]: [18:08:11.941924] Ping
[18:08:12.195546] Ping
Nov 23 18:08:12 a22ed876faec /logger.py[16]: [18:08:12.195546] Ping
[18:08:12.448298] Ping
Nov 23 18:08:12 a22ed876faec /logger.py[16]: [18:08:12.448298] Ping
[18:08:12.702494] Ping
Nov 23 18:08:12 a22ed876faec /logger.py[16]: [18:08:12.702494] Ping
[18:08:12.953930] Ping
Nov 23 18:08:12 a22ed876faec /logger.py[16]: [18:08:12.953930] Ping
[18:08:13.204705] Ping
Nov 23 18:08:13 a22ed876faec /logger.py[16]: [18:08:13.204705] Ping
[18:08:13.455713] Ping
Nov 23 18:08:13 a22ed876faec /logger.py[16]: [18:08:13.455713] Ping
[18:08:13.709442] Ping
Nov 23 18:08:13 a22ed876faec /logger.py[16]: [18:08:13.709442] Ping
[18:08:13.965485] Ping
Nov 23 18:08:13 a22ed876faec /logger.py[16]: [18:08:13.965485] Ping
[18:08:14.217358] Ping
Nov 23 18:08:14 a22ed876faec /logger.py[16]: [18:08:14.217358] Ping
[18:08:14.473215] Ping
Nov 23 18:08:14 a22ed876faec /logger.py[16]: [18:08:14.473215] Ping
[18:08:14.724741] Ping
Nov 23 18:08:14 a22ed876faec /logger.py[16]: [18:08:14.724741] Ping
[18:08:14.976330] Ping
Nov 23 18:08:14 a22ed876faec /logger.py[16]: [18:08:14.976330] Ping
[18:08:15.227224] Ping
Nov 23 18:08:15 a22ed876faec /logger.py[16]: [18:08:15.227224] Ping
[18:08:15.478073] Ping
Nov 23 18:08:15 a22ed876faec /logger.py[16]: [18:08:15.478073] Ping
[18:08:15.729183] Ping
Nov 23 18:08:15 a22ed876faec /logger.py[16]: [18:08:15.729183] Ping
[18:08:15.979973] Ping
Nov 23 18:08:15 a22ed876faec /logger.py[16]: [18:08:15.979973] Ping
[18:08:16.231814] Ping
Nov 23 18:08:16 a22ed876faec /logger.py[16]: [18:08:16.231814] Ping
[18:08:16.486040] Ping
Nov 23 18:08:16 a22ed876faec /logger.py[16]: [18:08:16.486040] Ping
[18:08:16.738648] Ping
Nov 23 18:08:16 a22ed876faec /logger.py[16]: [18:08:16.738648] Ping
[18:08:16.992551] Ping
Nov 23 18:08:16 a22ed876faec /logger.py[16]: [18:08:16.992551] Ping
[18:08:17.243947] Ping
Nov 23 18:08:17 a22ed876faec /logger.py[16]: [18:08:17.243947] Ping
[18:08:17.495166] Ping
Nov 23 18:08:17 a22ed876faec /logger.py[16]: [18:08:17.495166] Ping
[18:08:17.747728] Ping
Nov 23 18:08:17 a22ed876faec /logger.py[16]: [18:08:17.747728] Ping
[18:08:18.002310] Ping
Nov 23 18:08:18 a22ed876faec /logger.py[16]: [18:08:18.002310] Ping
[18:08:18.253047] Ping
Nov 23 18:08:18 a22ed876faec /logger.py[16]: [18:08:18.253047] Ping
[18:08:18.504103] Ping
Nov 23 18:08:18 a22ed876faec /logger.py[16]: [18:08:18.504103] Ping
[18:08:18.758437] Ping
Nov 23 18:08:18 a22ed876faec /logger.py[16]: [18:08:18.758437] Ping
[18:08:19.009905] Ping
Nov 23 18:08:19 a22ed876faec /logger.py[16]: [18:08:19.009905] Ping
[18:08:19.261080] Ping
Nov 23 18:08:19 a22ed876faec /logger.py[16]: [18:08:19.261080] Ping
[18:08:19.516725] Ping
Nov 23 18:08:19 a22ed876faec /logger.py[16]: [18:08:19.516725] Ping
[18:08:19.772660] Ping
Nov 23 18:08:19 a22ed876faec /logger.py[16]: [18:08:19.772660] Ping
*** An error occurred. Aborting.
*** Shutting down /etc/my_init.d/logger.py (PID 16)...
[18:08:19.890574] Caught signal SIGTERM, ignoring.
[18:08:20.026056] Ping
Nov 23 18:08:20 a22ed876faec /logger.py[16]: [18:08:20.026056] Ping
[18:08:20.277252] Ping
Nov 23 18:08:20 a22ed876faec /logger.py[16]: [18:08:20.277252] Ping
[18:08:20.530442] Ping
Nov 23 18:08:20 a22ed876faec /logger.py[16]: [18:08:20.530442] Ping
[18:08:20.782034] Ping
Nov 23 18:08:20 a22ed876faec /logger.py[16]: [18:08:20.782034] Ping
[18:08:21.033871] Ping
Nov 23 18:08:21 a22ed876faec /logger.py[16]: [18:08:21.033871] Ping
[18:08:21.284677] Ping
Nov 23 18:08:21 a22ed876faec /logger.py[16]: [18:08:21.284677] Ping
[18:08:21.540730] Ping
Nov 23 18:08:21 a22ed876faec /logger.py[16]: [18:08:21.540730] Ping
[18:08:21.796598] Ping
Nov 23 18:08:21 a22ed876faec /logger.py[16]: [18:08:21.796598] Ping
[18:08:22.048932] Ping
Nov 23 18:08:22 a22ed876faec /logger.py[16]: [18:08:22.048932] Ping
[18:08:22.304867] Ping
Nov 23 18:08:22 a22ed876faec /logger.py[16]: [18:08:22.304867] Ping
[18:08:22.556611] Ping
Nov 23 18:08:22 a22ed876faec /logger.py[16]: [18:08:22.556611] Ping
[18:08:22.811235] Ping
Nov 23 18:08:22 a22ed876faec /logger.py[16]: [18:08:22.811235] Ping
[18:08:23.064992] Ping
Nov 23 18:08:23 a22ed876faec /logger.py[16]: [18:08:23.064992] Ping
[18:08:23.319387] Ping
Nov 23 18:08:23 a22ed876faec /logger.py[16]: [18:08:23.319387] Ping
[18:08:23.570257] Ping
Nov 23 18:08:23 a22ed876faec /logger.py[16]: [18:08:23.570257] Ping
[18:08:23.821054] Ping
Nov 23 18:08:23 a22ed876faec /logger.py[16]: [18:08:23.821054] Ping
[18:08:24.071773] Ping
Nov 23 18:08:24 a22ed876faec /logger.py[16]: [18:08:24.071773] Ping
[18:08:24.322619] Ping
Nov 23 18:08:24 a22ed876faec /logger.py[16]: [18:08:24.322619] Ping
[18:08:24.573583] Ping
Nov 23 18:08:24 a22ed876faec /logger.py[16]: [18:08:24.573583] Ping
[18:08:24.824527] Ping
Nov 23 18:08:24 a22ed876faec /logger.py[16]: [18:08:24.824527] Ping
*** /etc/my_init.d/logger.py (PID 16) did not shut down in time. Forcing it to exit.
*** Init system aborted.
*** Killing all processes...
Nov 23 18:08:24 a22ed876faec syslog-ng[11]: syslog-ng shutting down; version='3.5.6'

Copy link
Collaborator

@Theaxiom Theaxiom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! 👍

@Theaxiom
Copy link
Collaborator

This can be merged after is passes Travis CI.

@Theaxiom Theaxiom merged commit 06e2983 into phusion:master Nov 23, 2017
@kamermans
Copy link
Contributor

Nice solution! I had not heard of monitor mode in bash before, but it makes total sense.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants