> On January 12, 2017 at 9:55 PM Matt Simpson <dcl...@list.jmatt.net> wrote: > > > I’m running dovecot 2.2.27 and pigeonhole 0.4.16 on FreeBSD 11. > > I’m using the pigeonhole/sieve external pipe plugin to run a Perl program to > send a Pushover notification when certain messages are received. > > The Perl script is executed, and the notification is sent. But then the > script task seems to go zombie until it is killed after a timeout. > > In the user’s sieve log, I get a message like > > error: msgid=<20170112191921.66140.qm...@v1.redhorse.me>: pipe action: failed > to pipe message to program `sievepush.pl': refer to server log for more > information. [2017-01-12 14:19:36]. > > (even though the message really was piped to the program successfully) > > In the dovecot server log, I see > > Jan 12 14:19:21 v1 dovecot: lda(matt): Debug: sieve: Executing script from > `/usr/home/matt/maildoms/.dovecot.svbin' > Jan 12 14:19:21 v1 dovecot: lda(matt): Debug: sieve: action pipe: running > program: sievepush.pl > Jan 12 14:19:21 v1 dovecot: lda(matt): Debug: Mailbox stdin: Opened mail > UID=1 because: mail stream > Jan 12 14:19:21 v1 dovecot: lda(matt): Debug: waiting for program > `/usr/local/lib/dovecot/sieve-pipe/sievepush.pl' to finish after 0 msecs > Jan 12 14:19:31 v1 dovecot: lda(matt): Debug: program > `/usr/local/lib/dovecot/sieve-pipe/sievepush.pl'(66145) execution timed out > after 10000 milliseconds: sending TERM signal > Jan 12 14:19:36 v1 dovecot: lda(matt): Debug: program > `/usr/local/lib/dovecot/sieve-pipe/sievepush.pl' (66145) did not die after > 5000 milliseconds: sending KILL signal > > In the process list during that 10 second interval, I see > > matt 66142 29972 801 801 0 S - 0:00.00 bin/qmail-local -- > matt /home/matt/maildoms jmn-matt - jmn-m > matt 66143 66142 801 801 0 S - 0:00.00 > /var/qmail/bin/preline -f /usr/local/libexec/dovecot/dovecot > matt 66144 66143 801 801 0 S - 0:00.01 > /usr/local/libexec/dovecot/dovecot-lda > matt 66145 66144 801 801 0 Z - 0:00.65 <defunct> > > I’m not a Unix programming ace, but from what I’ve been able to find out, > this seems to mean that the lda process is forking another process to run the > pipe script, and not getting the proper notification when it finishes (not > issuing a wait?). So after 10 seconds, it sends a TERM to the task which is > no longer running, and when that doesn’t work, it sends a KILL. Anybody know > what’s happening here? >
Seems that we are not doing waitpid() on your program when it's killed. Also, I guess we should wait longer than 0 msecs. I'll try and see if I can replicate this. Aki