On Wed, Sep 25, 2002 at 01:45:53PM +0400, Dmitry V. Levin wrote: > > > > > > > > У меня странная картина, monit из Сизифа валиться на пустом месте > > > > > > > > с SIGSERV. А собранный локально нормально работает. > > > > > Если приложение многопоточное и при этом нити используют get{host,net}by*, > > > > > то 99% что #0001259; traceback при этом ведет в libnss_XXX. > > > В таком случае применимы те же workaround'ы, что и для mysqld. > glibc-nss-2.2.6-alt0.3 Так. А что делать, если локально собранный 3.2-alt1 имени Игоря валится, причем даже при /etc/monitrc вида --- set daemon 120 set logfile syslog set mailserver localhost set mail-format { from: root@inmetex.com.ua subject: [monit] -- $PROGRAM $EVENT on $HOST at $DATE message: } check syslogd with pidfile /var/run/syslogd.pid start program = "/etc/init.d/syslogd start" stop program = "/etc/init.d/syslogd stop" alert admin group system --- (разумеется, /var/run/syslogd.pid существует и содержит правильный PID) Конец strace -ff выглядит так: --- read(4, "127.0.0.1\t\tlocalhost.localdomain"..., 4096) = 43 read(4, "", 4096) = 0 close(4) = 0 munmap(0x123000, 4096) = 0 uname({sys="Linux", node="trickster.inmetex", ...}) = 0 read(3, "", 8192) = 0 ioctl(3, TCGETS or SNDCTL_TMR_TIMEBASE, 0xbffff270) = -1 ENOTTY (Inappropriate ioctl for device) close(3) = 0 munmap(0x122000, 4096) = 0 stat64("/var/run/syslogd.pid", {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 stat64("/var/run/syslogd.pid", {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 open("/var/run/syslogd.pid", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x122000 read(3, "1186\n", 4096) = 5 close(3) = 0 munmap(0x122000, 4096) = 0 getpgid(0x4a2) = 1186 getuid32() = 0 stat64("/var/run/monit.pid", 0xbffff770) = -1 ENOENT (No such file or directory) --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ --- touch /var/run/monit.pid или помещение туда несуществующего PID => --- stat64("/var/run/monit.pid", {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 stat64("/var/run/monit.pid", {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 open("/var/run/monit.pid", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=5, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x122000 read(3, "2325\n", 4096) = 5 close(3) = 0 munmap(0x122000, 4096) = 0 getpgid(0x915) = -1 ESRCH (No such process) --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ --- Помещение туда PID "левого" существующего процесса приводит к отправке ему SIGUSR1 и счастливому завершению monit: --- stat64("/var/run/monit.pid", {st_mode=S_IFREG|0644, st_size=6, ...}) = 0 stat64("/var/run/monit.pid", {st_mode=S_IFREG|0644, st_size=6, ...}) = 0 open("/var/run/monit.pid", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=6, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x122000 read(3, "31193\n", 4096) = 6 close(3) = 0 munmap(0x122000, 4096) = 0 getpgid(0x79d9) = 31193 kill(31193, SIGUSR1) = 0 write(2, "monit daemon at 31193 awakened\n", 31monit daemon at 31193 awakened ) = 31 _exit(0) = ? --- Для удобства: ftp://ftp.altlinux.org/pub/people/mike/misc/monit-3.2-alt1.src.rpm -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/