From: Wietse Venema on
Len Conrad:
> >The only thing postscreen does after "postfix reload" (or stop) is
> >to fork a child process and terminate immediately in the parent
> >process; the child continues in the background, closes the Berkeley
> >DB table, erases the Berkeley DB handle, accepts no new connections,
> >and completes the client tests that are already in progress, without
> >saving the result.
> >
> >Perhaps you can see if "postfix reload" reproduces the error message.
>
>
> mx6# date
> Tue Dec 8 21:08:14 EST 2009
>
> mx6# postfix reload
> postfix/postfix-script: refreshing the Postfix mail system
>
> Dec 8 21:08:18 mx6 postfix/postscreen[12148]: fatal: close database /var/db/postfix/ps_cache.db: No such file or directory

Maybe you can try this patch. It moves the close() before the
fork(), and that would make a difference if Berkeley DB objects to
process ID changes.

If that does not help, then I recommend using use an older Berkeley
DB version (like, the default FreeBSD one).

Wietse

*** ./postscreen.c- Sat Dec 5 19:52:45 2009
--- ./postscreen.c Wed Dec 9 06:43:47 2009
***************
*** 987,992 ****
--- 987,996 ----
* but we don't need perfection. The host system is severely overloaded
* and service levels are already way down.
*/
+ if (cache_map != 0) {
+ dict_close(cache_map);
+ cache_map = 0;
+ }
for (count = 0; /* see below */ ; count++) {
if (count >= 5) {
msg_fatal("fork: %m");
***************
*** 995,1004 ****
sleep(1);
continue;
} else {
- if (cache_map != 0) {
- dict_close(cache_map);
- cache_map = 0;
- }
return;
}
}
--- 999,1004 ----