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