diff options
| author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-06-24 16:41:45 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-06-27 12:20:36 +0100 |
| commit | a06a47af305d44212c3aa1fb936cfdfe22848d20 (patch) | |
| tree | d529aa3a4b059046ff5012be8d3ef81cf8202fc1 /meta/recipes-extended/sysklogd | |
| parent | 3e2ab10159afd5b65e1120f25a7c347ad80f5227 (diff) | |
| download | poky-a06a47af305d44212c3aa1fb936cfdfe22848d20.tar.gz | |
sysklogd: Fix init script races
In testing we're seeing sysklogd fail to restart klogd since the original
process hasn't stopped before the new one is started. This means a restart
can result in no process running which is clearly not desireable.
Add extra code to ensure this works correctly. Busybox start-stop-daemon
seems particularly open to this kind of issue, the dpkg version maybe
less so if timeout options are used (which we don't use).
(From OE-Core rev: dc1fcb61f7d89cd066ace2edc143e7a2d329e033)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-extended/sysklogd')
| -rwxr-xr-x | meta/recipes-extended/sysklogd/files/sysklogd | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/meta/recipes-extended/sysklogd/files/sysklogd b/meta/recipes-extended/sysklogd/files/sysklogd index 258f882803..73424840ba 100755 --- a/meta/recipes-extended/sysklogd/files/sysklogd +++ b/meta/recipes-extended/sysklogd/files/sysklogd | |||
| @@ -90,6 +90,22 @@ running() | |||
| 90 | return 0 | 90 | return 0 |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | waitpid () | ||
| 94 | { | ||
| 95 | pid=$1 | ||
| 96 | # Give pid a chance to exit before we restart with a 5s timeout in 1s intervals | ||
| 97 | if [ -z "$pid" ]; then | ||
| 98 | return | ||
| 99 | fi | ||
| 100 | timeout=5; | ||
| 101 | while [ $timeout -gt 0 ] | ||
| 102 | do | ||
| 103 | timeout=$(( $timeout-1 )) | ||
| 104 | kill -0 $pid 2> /dev/null || break | ||
| 105 | sleep 1 | ||
| 106 | done | ||
| 107 | } | ||
| 108 | |||
| 93 | case "$1" in | 109 | case "$1" in |
| 94 | start) | 110 | start) |
| 95 | log_begin_msg "Starting system log daemon..." | 111 | log_begin_msg "Starting system log daemon..." |
| @@ -113,17 +129,23 @@ case "$1" in | |||
| 113 | start-stop-daemon --stop --quiet --signal 1 --pidfile $pidfile_syslogd --name syslogd | 129 | start-stop-daemon --stop --quiet --signal 1 --pidfile $pidfile_syslogd --name syslogd |
| 114 | log_end_msg $? | 130 | log_end_msg $? |
| 115 | log_begin_msg "Reloading kernel log daemon..." | 131 | log_begin_msg "Reloading kernel log daemon..." |
| 132 | pid=`cat $pidfile_klogd 2> /dev/null` | ||
| 116 | start-stop-daemon --stop --quiet --retry 3 --exec $binpath_klogd --pidfile $pidfile_klogd | 133 | start-stop-daemon --stop --quiet --retry 3 --exec $binpath_klogd --pidfile $pidfile_klogd |
| 134 | waitpid $pid | ||
| 117 | start-stop-daemon --start --quiet --pidfile $pidfile_klogd --name klogd --startas $binpath_klogd -- $KLOGD | 135 | start-stop-daemon --start --quiet --pidfile $pidfile_klogd --name klogd --startas $binpath_klogd -- $KLOGD |
| 118 | log_end_msg $? | 136 | log_end_msg $? |
| 119 | ;; | 137 | ;; |
| 120 | restart) | 138 | restart) |
| 121 | log_begin_msg "Restarting system log daemon..." | 139 | log_begin_msg "Restarting system log daemon..." |
| 140 | pid=`cat $pidfile_syslogd 2> /dev/null` | ||
| 122 | start-stop-daemon --stop --retry 5 --quiet --pidfile $pidfile_syslogd --name syslogd | 141 | start-stop-daemon --stop --retry 5 --quiet --pidfile $pidfile_syslogd --name syslogd |
| 142 | waitpid $pid | ||
| 123 | start-stop-daemon --start --quiet --pidfile $pidfile_syslogd --name syslogd --startas $binpath_syslogd -- $SYSLOGD | 143 | start-stop-daemon --start --quiet --pidfile $pidfile_syslogd --name syslogd --startas $binpath_syslogd -- $SYSLOGD |
| 124 | log_end_msg $? | 144 | log_end_msg $? |
| 125 | log_begin_msg "Reloading kernel log daemon..." | 145 | log_begin_msg "Reloading kernel log daemon..." |
| 146 | pid=`cat $pidfile_klogd 2> /dev/null` | ||
| 126 | start-stop-daemon --stop --quiet --retry 3 --exec $binpath_klogd --pidfile $pidfile_klogd | 147 | start-stop-daemon --stop --quiet --retry 3 --exec $binpath_klogd --pidfile $pidfile_klogd |
| 148 | waitpid $pid | ||
| 127 | start-stop-daemon --start --quiet --pidfile $pidfile_klogd --name klogd --startas $binpath_klogd -- $KLOGD | 149 | start-stop-daemon --start --quiet --pidfile $pidfile_klogd --name klogd --startas $binpath_klogd -- $KLOGD |
| 128 | log_end_msg $? | 150 | log_end_msg $? |
| 129 | ;; | 151 | ;; |
