I think we can delay daemonizing in both cases. Please try current git.
On Thu, Jun 8, 2023 at 10:44 AM Michael Tokarev <m...@tls.msk.ru> wrote: > > Current syslogd performs all init after daemonizing, meanwhile > main process exits successfully. This means any errors during init > will not be even shown up because at this time the process has its > stderr redirected to /dev/null already. > > On a MMU system, delay daemonizing to after init. > On non-MMU system, keep current code. > > Signed-off-by: Michael Tokarev <m...@tls.msk.ru> > --- > This is a generic problem with many busybox daemons, I think its > root is within the no-MMU system support (where we can't fork). > I think this should be solved in a more generic way too, but this > is just an example of how this can be fixed in principle. The > prob with syslogd is real, any error and it doesn't start but > does not show error messages and reports success, - this is hardly > acceptable behavour. > > sysklogd/syslogd.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c > index 6ddfd771a..2f9a727cd 100644 > --- a/sysklogd/syslogd.c > +++ b/sysklogd/syslogd.c > @@ -1025,7 +1025,6 @@ static void do_syslogd(void) > signal(SIGALRM, do_mark); > alarm(G.markInterval); > #endif > - xmove_fd(create_socket(), STDIN_FILENO); > > if (option_mask32 & OPT_circularlog) > ipcsyslog_init(); > @@ -1033,6 +1032,16 @@ static void do_syslogd(void) > if (option_mask32 & OPT_kmsg) > kmsg_init(); > > + { > + int fd = create_socket(); > +#if BB_MMU > + if (!(option_mask32 & OPT_nofork)) { > + bb_daemonize(DAEMON_CHDIR_ROOT); > + } > +#endif > + xmove_fd(fd, STDIN_FILENO); > + } > + > timestamp_and_log_internal("syslogd started: BusyBox v" BB_VER); > write_pidfile_std_path_and_ext("syslogd"); > > @@ -1179,9 +1188,11 @@ int syslogd_main(int argc UNUSED_PARAM, char **argv) > G.hostname = safe_gethostname(); > *strchrnul(G.hostname, '.') = '\0'; > > +#if !BB_MMU > if (!(opts & OPT_nofork)) { > bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); > } > +#endif > > do_syslogd(); > /* return EXIT_SUCCESS; */ > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox