Witajcie.
Mam problemik z ProFTPd taki, że co jakiś czas - niestety nieregularny - pada 
mi proces główny serwera ftp. Na Debianie 3.0r3 był zainstalowany z pakietu 
ProFTPd i co jakiś czas się wywalał. Był apt-get update i dalej to samo. 
Ściągnąłem źródła z proftpd.org i skompilowałem, znowu się wywalał. 
Skompilowałem z opcją "-ggdb" żeby móc (spróbować) się podpiąć jak padnie, padł 
znowu ale ciężko mi idzie z GDB i mam niewielki log dla chętnych do przejrzenia.
Sytuacja jest dość dziwna: mam ustawiony DebugLevel na 6, osobny plik na 
syslog, oczywiście proftpd i xferlog. Server na któym działa ProFTPd nie był 
zbytnio używany, raz dziennie kilka plików wpadło. Jak zaczął padać ftp to - 
żeby nie wyrzucili mnie z pracy ;-) -  napisałem skrypcik który z innego peceta 
wrzuca i pobiera średniej wielkości plik na/z serwera i jak coś to wysyła mi 
mejla.
Logi są zapisywane gęsto ale kiedy serwer działa normalnie, kiedy następi 
"crash" to nic się nie zapisuje, pomimo że proces główny działa, skrypcik go 
bombarduje dalej co 10 minut (bo to z crona). Próba zalogowania kończy się 
_natychmiast_ z komunikatem że 300 sekund upłynęło.
"Remote host has closed the connection.
421. Login Timeout (300 seconds): closing control connection. Server hungup 
immediately after connect"

Napisałem na listę userów ProFTPd, i jeden gość mi odpisał że słyszał iż są 
takie problemy na Debianie. Odesłał mnie na 
http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=proftpd
Na oko nic podobnego nie znalazłem, nie chcę więc wypisywać głupot. Być może 
będzie to trzeba zgłosić do opiekuna pakietu.

Jak możecie to zerknijcie do załączonego pliku albo powiedzcie jak skompilować 
tego ProFTPd żeby coś się więcej dowiedzieć. Te logi z Sysloga z DebugLevelem 6 
są w takiej sytuacji nie przydatne. Z wyższysmi poziomami się bawiłem ale zbyt 
dużo logów i tam są całe 


GNU gdb 2002-04-01-cvs
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-linux".
(gdb) at 16477
Attaching to process 16477
Reading symbols from /chroot/apache/usr/local/proftpd/sbin/proftpd...done.
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /lib/libnss_dns.so.2...done.
Loaded symbols for /lib/libnss_dns.so.2
Reading symbols from /lib/libresolv.so.2...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /lib/libnss_compat.so.2...done.
Loaded symbols for /lib/libnss_compat.so.2
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
0x299747ee in select () from /lib/libc.so.6
(gdb) se tep
Single stepping until exit from function select, 
which has no line number information.
daemon_loop () at main.c:1453
1453        if (i == -1 && errno == EINTR) {
(gdb) 
1458        if (have_dead_child) {
(gdb) 
1474        if (i == -1) {
(gdb) 
1493        if (i == 0)
(gdb) 
1499        nconnects = 1UL;
(gdb) 
1502        if (child_count()) {
(gdb) 
(gdb) 
child_count () at child.c:67
67        return child_listlen;
(gdb) 
68      }
(gdb) 
daemon_loop () at main.c:1521
1521        pr_signals_handle();
(gdb) 
(gdb) 
pr_signals_handle () at main.c:1569
1569      while (recvd_signal_flags) {
(gdb) 
1632    }
(gdb) 
daemon_loop () at main.c:1524
1524        listen_conn = pr_ipbind_accept_conn(&listenfds, &fd);
(gdb) 
(gdb) 
pr_ipbind_accept_conn (readfds=0x5ee6831c, listenfd=0x5ee68314) at bindings.c:94
94        conn_t *listener = listener_list;
(gdb) 
95        int fd = -1;
(gdb) 
96        register unsigned int i = 0;
(gdb) 
99        if (!readfds) {
(gdb) 
104       if (!listenfd) {
(gdb) 
109       for (i = 0, listener = listener_list; i < listener_listlen;
(gdb) 
111         pr_signals_handle();
(gdb) 
(gdb) 
pr_signals_handle () at main.c:1569
1569      while (recvd_signal_flags) {
(gdb) 
1632    }
(gdb) 
pr_ipbind_accept_conn (readfds=0x5ee6831c, listenfd=0x5ee68314) at 
bindings.c:113
113         if (FD_ISSET(listener->listen_fd, readfds) &&
(gdb) 
116           if ((fd = pr_inet_accept_nowait(listener->pool, listener)) == -1) 
{
(gdb) 
(gdb) 
pr_inet_accept_nowait (p=0x8105504, c=0x810552c) at inet.c:882
882       if (c->mode == CM_LISTEN)
(gdb) 
883         pr_inet_set_nonblock(c->pool, c);
(gdb) 
(gdb) 
pr_inet_set_nonblock (p=0x8105504, c=0x810552c) at inet.c:711
711       int res = -1;
(gdb) 
713       errno = EBADF;                /* Default */
(gdb) 
(gdb) 
Single stepping until exit from function __errno_location, 
which has no line number information.
pr_inet_set_nonblock (p=0x8105504, c=0x810552c) at inet.c:715
715       if (c->mode == CM_LISTEN) {
(gdb) 
716         flags = fcntl(c->listen_fd, F_GETFL);
(gdb) 
(gdb) 
Single stepping until exit from function fcntl, 
which has no line number information.
pr_inet_set_nonblock (p=0x8105504, c=0x810552c) at inet.c:717
717         res = fcntl(c->listen_fd, F_SETFL, flags|O_NONBLOCK);
(gdb) 
(gdb) 
Single stepping until exit from function fcntl, 
which has no line number information.
pr_inet_set_nonblock (p=0x8105504, c=0x810552c) at inet.c:719
719       } else {
(gdb) 
731       return res;
(gdb) 
732     }
(gdb) 
pr_inet_accept_nowait (p=0x8105504, c=0x810552c) at inet.c:890
890       c->mode = CM_ACCEPT;
(gdb) 
891       while (TRUE) {
(gdb) 
892         pr_signals_handle();
(gdb) 
(gdb) 
pr_signals_handle () at main.c:1569
1569      while (recvd_signal_flags) {
(gdb) 
1632    }
(gdb) 
pr_inet_accept_nowait (p=0x8105504, c=0x810552c) at inet.c:893
893         fd = accept(c->listen_fd, NULL, NULL);
(gdb) 
(gdb) 
Single stepping until exit from function accept, 
which has no line number information.
pr_inet_accept_nowait (p=0x8105504, c=0x810552c) at inet.c:895
895         if (fd == -1) {
(gdb) 
910         break;
(gdb) 
916       pr_inet_set_block(c->pool, c);
(gdb) 
(gdb) 
pr_inet_set_block (p=0x8105504, c=0x810552c) at inet.c:736
736       int res = -1;
(gdb) 
738       errno = EBADF;                /* Default */
(gdb) 
(gdb) 
Single stepping until exit from function __errno_location, 
which has no line number information.
pr_inet_set_block (p=0x8105504, c=0x810552c) at inet.c:740
740       if (c->mode == CM_LISTEN) {
(gdb) 
745         if (c->rfd != -1) {
(gdb) 
750         if (c->wfd != -1) {
(gdb) 
756       return res;
(gdb) 
757     }
(gdb) 
pr_inet_accept_nowait (p=0x8105504, c=0x810552c) at inet.c:918
918       return fd;
(gdb) 
0x08060960      919     }
(gdb) 
pr_ipbind_accept_conn (readfds=0x5ee6831c, listenfd=0x5ee68314) at 
bindings.c:131
131           *listenfd = fd;
(gdb) 
132           return listener;
(gdb) 
137     }
(gdb) 
daemon_loop () at main.c:1531
1531        if (listen_conn) {
(gdb) 
1534          if (ServerMaxInstances && (child_count() >= ServerMaxInstances)) {
(gdb) 
(gdb) 
child_count () at child.c:67
67        return child_listlen;
(gdb) 
68      }
(gdb) 
daemon_loop () at main.c:1553
1553            fork_server(fd, listen_conn, FALSE);
(gdb) 
(gdb) 
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1021
1021      conn_t *conn = NULL;
(gdb) 
1022      unsigned char *ident_lookups = NULL;
(gdb) 
1024      int semfds[2] = { -1, -1 };
(gdb) 
1025      int xerrno = 0;
(gdb) 
1031      if (!nofork) {
(gdb) 
1040        if (pipe(semfds) == -1) {
(gdb) 
(gdb) 
Single stepping until exit from function pipe, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1050
1050        if (semfds[1] < 3)
(gdb) 
1058        sigemptyset(&sig_set);
(gdb) 
(gdb) 
Single stepping until exit from function sigemptyset, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1059
1059        sigaddset(&sig_set, SIGTERM);
(gdb) 
(gdb) 
Single stepping until exit from function sigaddset, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1060
1060        sigaddset(&sig_set, SIGCHLD);
(gdb) 
(gdb) 
Single stepping until exit from function sigaddset, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1061
1061        sigaddset(&sig_set, SIGUSR1);
(gdb) 
(gdb) 
Single stepping until exit from function sigaddset, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1062
1062        sigaddset(&sig_set, SIGUSR2);
(gdb) 
(gdb) 
Single stepping until exit from function sigaddset, 
which has no line number information.
fork_server (fd=1, l=0x810552c, nofork=0 '\0') at main.c:1064
1064        sigprocmask(SIG_BLOCK, &sig_set, NULL);
(gdb) 
(gdb) 
Single stepping until exit from function sigprocmask, 
which has no line number information.
warning: Cannot insert breakpoint -27:
warning: Temporarily disabling shared library breakpoints:
warning: breakpoint #-27
warning: breakpoint #-28
warning: Cannot insert breakpoint 0:
warning: Temporarily disabling shared library breakpoints:
warning: breakpoint #0

Odpowiedź listem elektroniczym