[OpenWrt-Devel] Wait on syslog-ng
Eneas Queiroz
cotequeiroz at gmail.com
Fri Sep 27 09:43:58 EDT 2019
On Fri, Sep 27, 2019 at 8:05 AM W. Michael Petullo <mike at flyn.org> wrote:
>
> A daemon I wrote for OpenWrt depends on a running syslogd. I use
> syslog-ng, and I have noticed that its init script completes before the
> daemon begins to listen on /dev/log. This causes my daemon to terminate
> if it starts quickly after syslog-ng.
>
> There are a few obvious solutions:
>
> (1) My daemon could sleep and try again if its connection to
> syslogd fails.
>
> (2) My daemon's init script could sleep for one second before
> running the daemon.
>
> (3) Syslog-ng's init script could sleep for one second after
> executing syslog-ng and before exiting.
>
> (3) seems the most universal, but all of these feel a little kludgy due
> to the reliance on a timeout. I say this becasue you cannot precisely
> predict what the timeout value should be (in practice a second or so
> seems to suffice).
>
> Does the init system provide a more general way to solve this problem?
> The START=n statements seem to impose only the ordering of init script
> execution and have no bearing on whether the services the scripts run
> are ready. Do I have this right?
>
> I did see sleep in a few other scripts such as network.
How about something like this?
#!/bin/sh
exitservice() {
if [ -n "$!" ]; then
echo Killing timout
kill $! 2> /dev/null
wait $! 2> /dev/null
fi
}
timeout() {
sleep 10
echo 'ERROR: socket not open. Is syslog running?' >&2
kill $$
exit 1
}
trap exitservice EXIT
timeout &
while ! grep -q /dev/log /proc/net/unix; do
sleep 1
done
exit 0
Cheers,
Eneas
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list