Re: [Exim] Exim 4.10 on FreeBSD

Startseite
Nachricht löschen
Nachricht beantworten
Autor: Igor Karpov
Datum:  
To: exim-users
Betreff: Re: [Exim] Exim 4.10 on FreeBSD
On Fri, Jan 17, 2003 at 01:46:16PM +0000, Philip Hazel wrote:
> On Fri, 17 Jan 2003 Danny.Carroll@??? wrote:
>
> > > When Exim starts up as a daemon with a -q setting, it should
> > > always do a
> > > queue run right at the start.
> >
> > I figured that, but it just doesnt.... And it will not log why.
> > But if i do it with -d then it *does* and logs it too....
>
> Sounds like it's sledgehammer time.
>
> Look at the source file daemon.c. The daemon-running code is between
> lines 1104 and 1183 in Exim 4.12.
>
> You will have to stuff in some debugging code to try to track what is
> goind on. Of course, you can't use the normal debugging output, because
> you don't want to use -d. You have to use some expensive code like this:
>
> {
> FILE *f = fopen("/some/writeable/file", "a");
> fprintf(f, "reached this point: data =....\n");
> fclose(f);
> }
>
> If you put that in in several places (with appropriate texts, and
> printing the values of approprate variables) it should be possible to
> trace what is going on, and perhaps why it isn't starting the queue
> runner. In particular, check that it gets to line 1146, which contains:
>
> (void)child_exec_exim(CEE_EXEC_PANIC, FALSE, NULL, TRUE, 1, opt);
>
> That is the point at which it tries to run the queue runner. The actual
> exec itself is in line 146 of the child.c source. However, if that
> fails, something should be logged.


I inserted this code into daemon.c:

------
/* This code is placed first in the loop, so that it gets obeyed at
the start, before the first wait. This causes the first queue-runner
to be started immediately. */

  if (daemon_sigalrm_seen)
    {
      {
       FILE *f = fopen("/var/log/exim/queuelog","a");
       fprintf(f, "Reached this point: daemon_sigalarm_seen\n");
       fclose(f);
      }
------


and here:
------
        /* No need to re-exec */
  queue_run(NULL, NULL, FALSE);
  {
   FILE *f =
   fopen("/var/log/exim/queuelog","a");
   fprintf(f, "Reached this point: queue_run(NULL, NULL, FALSE)\n");
   fclose(f);
  }
  _exit(EXIT_SUCCESS);
------                                              }


/var/log/exim/queuelog contains:

Reached this point: daemon_sigalarm_seen
Reached this point: daemon_sigalarm_seen

So, the second checkpoint wasn't reached. If you need to print out some
variables, let me know which ones.

I saw also that when I ran the queue manually with exim -v -qqff, the
second checkpoint was not reached too. Bad place for this?

Regards,
--
Igor A. Karpov    phone: +380(44)238-0624
Unix System Administrator


           How come you can send sounds using MIME?