$B$3$NJ8=q$O(B DJB $B;a$N(B daemontools $B%Q%C%1!<%8$K6=L#$r;}$?$l$kJ}$d$3$l$+$iF3F~!&1?MQ$r9T$*$&$H$9$kJ}$K8~$1$F=q$+$l$?$b$N$G$9!#(Bdaemontools $B%Q%C%1!<%8$N35MW!"F3F~!&@_DjJ}K!!";HMQNc$J$I$r$^$H$a$F$$$^$9!#$7$+$7!"3F%D!<%k$r>\:Y$K@bL@$9$k$b$N$G$O$"$j$^$;$s!#$=$N$?$a!"$3$NJ8=q$rFI$s$@8e$K!"(B$B%^%K%e%"%k(B*1 $B$rFI$s$G$/$@$5$$!#(B$BF|K\8lLu(B*2$B$b$"$j$^$9!#(B $B$^$?!"?7;3$5$s$N(B daemontools FAQ*3$B$b$"$j$^$9$N$G$=$A$i$b$4Mw2<$5$$!#(B
$BCp5-(B
daemontools $B$O%5!<%S%9$r0BA4!&3N
1.2. $B%Q%C%1!<%8$NFbMF(B
daemontools $B%Q%C%1!<%8$K4^$^$l$F$$$k%W%m%0%i%`$K$O
$B%W%m%0%i%`L>(B | $B@bL@(B |
---|---|
supervise | $B%5!<%S%9$r3+;O$5$;!"4F;k$7$^$9!#2?$i$+$N%H%i%V%k$G%5!<%S%9$,Dd;_$7$?$i!"<+F0E*$K:F5/F0$5$;$^$9!#(B |
svc | supervise $B$K$h$j4F;k$5$l$F$$$k%5!<%S%9$r@)8f$7$^$9!#(B |
svok | supervise $B$,5/F0$7$F$$$k$+$rD4$Y$^$9!#(B |
svstat | supervise $B$K$h$j4F;k$5$l$F$$$k%5!<%S%9$N>uBV$r=PNO$7$^$9!#(B |
svscan | $B%5!<%S%9$N=8$^$j$r3+;O$5$;!"4F;k$7$^$9!#(B |
fghack | $B<+?.$r%P%C%/%0%i%s%I$K0\$9%5!<%S%9$,%P%C%/%0%i%s%I$K0\$k$N$rKI$0%D!<%k$G$9!#(B |
multilog | $BI8=`F~NO$+$i0lB3$-$N9T$rFI$_!"G$0U$N?t$N%m%0$KA*Br$5$l$?9T$rDI2C$7$^$9!#(B |
tai64n | $B3F9T$K(B TAI64N $B7A<0$N@53N$J%?%$%`%9%?%s%W$r$rIU$1$^$9!#(B |
tai64nlocal | TAI64N $B7A<0$N%?%$%`%9%?%s%W$r?M$,FI$a$k7A<0$KJQ49$7$^$9!#(B |
setuidgid | $B;XDj$5$l$?%"%+%&%s%H$N(B uid $B$H(B gid $B$GJL$N%W%m%0%i%`$r5/F0$7$^$9!#(B |
envuidgid | $B;XDj$5$l$?%"%+%&%s%H$N(B uid $B$H(B gid $B$r<($94D6-JQ?t$r@_Dj$7$FJL$N%W%m%0%i%`$r5/F0$5$;$^$9!#(B |
envdir | $B;XDj$7$?%G%#%l%/%H%j$K$"$k%U%!%$%k$K$h$C$F=$@5$5$l$?4D6-$r@_Dj$7$FJL$N%W%m%0%i%`$r5/F0$5$;$^$9!#(B |
softlimit | $B?7$7$$;q8;@)8B$rH<$C$FJL$N%W%m%0%i%`$r5/F0$5$;$^$9!#(B |
setlock | $B%U%!%$%k$r%m%C%/$7$FJL$N%W%m%0%i%`$r5/F0$5$;$^$9!#(B |
$B4{B8$NB>$N%W%m%0%i%`$H$K0c$$$O
daemontools $B$N%Q%C%1!<%8(B daemontools-0.70.tar.gz $B$rF~ $B%U%!%$%k$rE83+$7!"$=$N%G%#%l%/%H%j$K0\F0$7$^$9!#(B $B%3%s%Q%$%k$7$F!"%$%s%9%H!<%k$7$^$9!#(B $B;n83$r9T$$$^$9!#2?$b=PNO$7$J$+$C$?$i@5>o$G$9!#(B $B%?%$%`%9%?%s%W$r3NG'$7$^$9!#3F9T$NA0$NF|;~$H8e$m$NF|;~$OF1$8$K$J$j$^$9!#$?$@$7!"C
$B0J>e!"2?$bLdBj$,@8$8$J$1$l$P!"%$%s%9%H!<%k$O=*N;$G$9!#(B $B4XO"%j%s%/(B svscan $B$,4F;k$9$k%G%#%l%/%H%j$r:n@.$7$^$9!#(Bsvscan $B$K4X$9$k@bL@$OO$G9T$$$^$9!#(B $B%V!<%H%9%/%j%W%H$K(B svscan $B$r5/F0$9$k%3%^%s%I$rEPO?$7$^$9!#(BBSD $B7A<0$N5/F0%9%/%j%W%H$G$"$l$P!"(Brc.local $B$J$I$K!"PATH $B$OI,MW$@$H;W$&$b$N$r@_Dj$7$F$/$@$5$$!#(B SVR4 $B7A<0$N5/F0%9%/%j%W%H$G$"$l$P!"svscan $B$r:n@.$7!"EPO?$7$F$/$@$5$$!#(BOS $B$K$h$j>/!9=$@5$9$kI,MW$,$"$k$H;W$$$^$9!#(B $B$J$*!"(BRedHat Linux 7.x$BMQ$N5/F0%9%/%j%W%H$O(B http://www.emaillab.org/djb/daemontools/svscan $B$K$"$j$^$9!#
$B5/F0%9%/%j%W%H$NEPO?$,$G$-$?$i!"5/F0%9%/%j%W%H$r8DJL$K $B4XO"%j%s%/(B svscan $B$O4F;kBP>]$N%G%#%l%/%H%j(B /service $B$K%5%V%G%#%l%/%H%j(B sub $B$,$"$k$H$-!"$=$N%G%#%l%/%H%jL>$r0z?t$K$7$F(B supervise $B$r5/F0$5$;$^$9!#(Bsupervise $B$O0z?t$GEO$5$l$?%G%#%l%/%H%j(B sub $B$K0\F0$7!"(B./run $B%9%/%j%W%H$r5/F0$5$;!"4F;k$7$^$9!#$3$N(B ./run $B$K$O%5!<%S%9$r $B>e5-$G=R$Y$?$3$H$K2C$($F!"(Bsvscan $B$K$O
$B>e5-$G=R$Y$?$3$H$K2C$($F!"(Bsupervise $B$K$O
$B4XO"%j%s%/(B $B5/F0$5$;$?$$%5!<%S%9$N$?$a$N%G%#%l%/%H%j(B/path/to/foo$B$rE,Ev$J>l=j$K:n@.$7$^$9!#(B $B./run $B$r:n@.$7!"%5!<%S%9$r /service/sub $B$+$i(B /path/to/foo $B$X$N%7%s%\%j%C%/%j%s%/$r:n$j$^$9!#(B 5$BIC0JFb$K(B supervise $B$,5/F0$9$k$G$7$g$&!#(Bsvok $B$r;H$C$F5/F0$,@.8y$7$F$$$k$+3NG'$G$-$^$9!#$^$?!"(Bsvstat $B$G$b$=$N5/F0$N>uBV$r3NG'$G$-$^$9!#(B $B5/F0$5$;$?$$%5!<%S%9$N$?$a$N%G%#%l%/%H%j(B/path/to/foo$B$rE,Ev$J>l=j$K:n@.$7$^$9!#%m%0MQ$N%G%#%l%/%H%j(B /path/to/foo/log $B$b:n@.$7$^$9!#$5$i$K(B foo $B$KBP$7$F(B sticky bit $B$rN)$F$^$9!#%m%0$N=PNO$r9T$&(B UID, GID $B$rJQ$($k>l9g$O!"(Blog $B$N=jM- $B./run $B$r:n@.$7!"%5!<%S%9$r /service/sub $B$+$i(B /path/to/foo $B$X$N%7%s%\%j%C%/%j%s%/$r:n$j$^$9!#(B 5$BIC0JFb$K(B supervise $B$,5/F0$9$k$G$7$g$&!#(Bsvok $B$r;H$C$F5/F0$,@.8y$7$F$$$k$+3NG'$G$-$^$9!#$^$?!"(Bsvstat $B$G$b$=$N5/F0$N>uBV$r3NG'$G$-$^$9!#(B $B$^$:!"(Bqmail $B$N5/F0%W%m%0%i%`(B qmail-start $BMQ$N%G%#%l%/%H%j$r:n@.$7$^$9!#>l=j$O$I$3$G$b$+$^$$$^$;$s$,!"$3$3$G$O(B /var/qmail/supurvise/qmail-send $B$H$7$^$9!#%m%0$rJ]B8$9$k$?$a$K!"$3$N%G%#%l%/%H%j$K(B sticky bit $B$rN)$F!"$=$N%G%#%l%/%H%j$N2<$K$K(B qmail-send $B$N%m%0J]B8MQ%f!<%6(B qmaill $B=jM-$N%G%#%l%/%H%j(B log $B$r:n@.$7$^$9!#(B $B5/F0%9%/%j%W%H(B ./run $B$H(B log/run $B$r:n@.$7$^$9!#$3$N%9%/%j%W%H$NNc$O
/service/qmail $B$+$i$N%7%s%\%j%C%/%j%s%/$r:n$j$^$9!#(B 5$BIC0JFb$K(B supervise $B$,5/F0$9$k$O$:$J$N$G!"(Bsvok $B$"$k$$$O(B svstat $B$G5/F0$r3NG'$7$F$/$@$5$$!#$^$?!"(Bqmail $B$N%^%K%e%"%k$K5-=R$7$F$"$kG[Aw;n83$r9T$C$F$/$@$5$$!#(B $Bqmail-smtpd $BMQ$N%G%#%l%/%H%j$r:n@.$7$^$9!#$3$3$G$O(B /var/qmail/supervise/qmail-smtpd $B$H$7$^$9!#%m%0$rJ]B8$9$k$?$a$K!"$3$N%G%#%l%/%H%j$K(B sticky bit $B$rN)$F!"$=$N%G%#%l%/%H%j$N2<$K$K(B qmail-send $B$N%m%0J]B8MQ%f!<%6(B smtplog $B=jM-$N%G%#%l%/%H%j(B log $B$r:n@.$7$^$9!#(B $B5/F0%9%/%j%W%H(B ./run $B$H(B log/run $B$r:n@.$7$^$9!#$3$N%9%/%j%W%H$NNc$O
/service/smtpd $B$+$i$N%7%s%\%j%C%/%j%s%/$r:n$j$^$9!#(B 5$BIC0JFb$K(B supervise $B$,5/F0$9$k$O$:$J$N$G!"(Bsvok $B$"$k$$$O(B svstat $B$G5/F0$r3NG'$7$F$/$@$5$$!#(B $B4XO"%j%s%/(B $B$3$3$G$O!"%5!<%S%9$N5/F0%9%/%j%W%H(B ./run $B$N:[email protected]$r<($7$^$9!#%m%0$N<}=8%9%/%j%W%H(B log/run $B$K4X$7$F$O$3$3$G$OE57?E*$JNc$7$+<($7$^$;$s!#1~MQNc$OO$K5-=R$7$^$9!#(B qmail $B$N%a%$%kG[Aw$N%W%m%0%i%`$r5/F0$5$;!"G[Aw$N%m%0$r ./run ./log/run qmail $B$N(B SMTP $B%G!<%b%s(B qmail-smtpd $B$r(B tcpserver $B$G5/F0$5$;$F@\B3@)8f$r9T$$!"@\B3>u67$N%m%0$r ./run ./log/run $B4XO"%j%s%/(B svc $B$r;H$C$F
svc $B$N;H$$J}$O
opts $B$O(B getopt $B7A<0$N%*%W%7%g%s$G$9!#J#?t$N%*%W%7%g%s$r;XDj$G$-!"A0$+$i=gHV$K $B%7%0%J%k$N0UL#$O\:Y$O(B signal(7) $B$rFI$s$G$/$@$5$$!#(B $B$3$3$G!"$$$/$D$+$N;HMQNc$r<($7$^$9!#(B qmail-send $B$N@_Dj$NJQ99$rM-8z$K$9$k$?$a$N%5!<%S%9$N:F5/F0(B ./run $B$N=q$-49$(;~$N=hM}(B $B%5!<%S%9$N0l;~E*$JDd;_$*$h$S:F3+(B $B%5!<%S%9$NDd;_8e!"(Bsupervise $B$N=*N;!J$?$@$7!"(B5$BIC0JFb$K(B supervise $B$O:F5/F0$9$k!K(B $B%5!<%S%9$NDd;_8e!"(Bsupervise $B$N=*N;!J(Bsupervise $B$r:F3+$5$;$J$$!K(B svscan$B$r=*N;$5$;$k$H$-!JA4$F$N%5!<%S%9$NDd;_8e!"(Bsupervise $B$r=*N;$7!"(Bsvscan $B$N%W%m%;%9$r=*N;$9$k!K(B $B4XO"%j%s%/(B $BA0>O$G=R$Y$?%m%0$N<}=8%9%/%j%W%H(B log/run $B$K$O<}=8%W%m%0%i%`$H$7$F(B multilog $B$r;H$$$^$9!#$3$3$G$O!"$=$N(B multilog $B$N;H$$J}$K$D$$$F@bL@$7$^$9!#(B multilog $B$N;H$$J}$O
script $B$OF0:n(B(action)$B$N=8$^$j$G!"
$B3F9T$O:G=i$OA*Br$5$l$F$$$^$9!#9T$NA*Br;XDj$O$$$/$D$G$b5-=R$G$-!"A0$+$i=gHV$K$=$N%Q%?!<%s$NA*Br!&2r=|$,DI2C$5$l$F$$$-$^$9!#(B pattern$B$N;EMM$O
$BA[Dj30$NF0:n$rKI$0$?$a$K!"(Bpattern$BA4BN$r0zMQId$G0O$s$@J}$,L5Fq$G$7$g$&!#(B $B$3$3$G!"$$$/$D$+9T$NA*Br;XDj$NNc$r<($7$^$9!#(Bmultilog $B$N>\$7$$;HMQNc$K4X$7$F$O
$BF0:n(B $BF0:n(B $BF0:n(B $B0lB3$-$NF0:n(B $B4XO"%j%s%/(B qmail $B$N%a%$%kG[Aw%W%m%0%i%`(B qmail-send $B$N%m%0$r $B$A$J$_$K!"$3$NNc$O(B DJB $B;a$,%a%$%j%s%0%j%9%H$KEj9F$7$?Nc$r=$@5$7$?$b$N$G$9!#(B qmail $B$N(B SMTP $B%G!<%b%s(B qmail-smtpd $B$rESCf$r(B recordio $B$r64$s$G(B tcpserver $B$G5/F0$5$;$F@\B3@)8f$r9T$$!"@\B3>u67$N%m%0$H%3%^%s%I$N1~Ez$r $B$A$J$_$K(B recordio $B$H$O!"%W%m%0%i%`$NF~=PNO$r5-O?$9$k%W%m%0%i%`$G!"(Bucspi-tcp $B%Q%C%1!<%8$K4^$^$l$F$$$^$9!#$3$l$rMQ$$$l$P!"%m%0$N=PNO$r;}$?$J$$%5!<%S%9$G$"$C$F$b!"%;%C%7%g%s$N%3%^%s%I$N1~Ez$+$i!"IT@5Cf7Q$N;n$_$J$I$NMM!9$J>pJs$r5-O?$9$k$3$H$,$G$-$^$9!#$?$@$7!"A*Br$9$k9T$K$h$C$F$O%W%i%$%P%7$NLdBj$K$b$J$k$N$G07$$$K$OCm0U$,I,MW$G$9!#(B $B4XO"%j%s%/(B $B$3$3$^$G
$ cd daemontools-0.70
# make setup check
$ cmp rts.out rts.exp
2000-05-05 11:16:53.959932500 Fri May 5 11:16:53 JST 2000
$ date | sh -c './multilog t e 2>&1' | ./tai64nlocal
2000-05-05 11:17:11.739003500 Fri May 5 11:17:11 JST 2000
2.2. svscan $B$N5/F0(B
# chmod 755 /service
#!/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
case "$1" in
start)
echo -n "Starting svscan: "
exec env - PATH="$PATH" \
csh -cf 'svscan /service &; echo $! > /var/run/svscan.pid'
touch /var/lock/subsys/svscan
;;
stop)
if [ -f /var/run/svscan.pid ]; then
echo -n "Stopping svscan: "
kill `cat /var/run/svscan.pid`
svc -dx /service/*
svc -dx /service/*/log
rm -f /var/run/svscan.pid
rm -f /var/lock/subsys/svscan
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
# cp /tmp/svscan .
# chmod +x svscan
# chkconfig --add svscan
3. $B%5!<%S%9$N@)8f(B
3.1. svscan $B$H(B supervise $B$NF0:n(B
$B%W%m%0%i%`(B
$B:n6H%G%#%l%/%H%j(B
svscan /service
/service
supervise sub
/service/sub
supervise log
/service/sub/log
3.2. $B3F%5!<%S%9$N5/F0(B
a) $B%m%0$r
0
# svstat /service/sub
/service/sub: up (pid 1234) 20 seconds
b) $B%m%0$r
# mkdir /path/to/foo/log
# chmod +t /path/to/foo
# chown uid.gid /path/to/foo/log
0
# svok /service/sub/log; echo "$?"
0
# svstat /service/sub /service/sub/log
/service/sub: up (pid 1234) 20 seconds
/service/sub/log: up (pid 1235) 20 seconds
$B6qBNNc(B(qmail$B$N>l9g(B)
# chmod +t /var/qmail/supervise/qmail-send
# mkdir /var/qmail/supervise/qmail-send/log
# chown qmaill.nofiles /var/qmail/supervise/qmail-send/log
# chmod +t /var/qmail/supervise/qmail-smtpd
# mkdir /var/qmail/supervise/qmail-smtpd/log
# chown smtplog.nofiles /var/qmail/supervise/qmail-smtpd/log
3.3. $B5/F0%9%/%j%W%H(B ./run $B$NNc(B
./run $B$r:n@.$9$k$KEv$?$C$F$NCm0U;v9`(B
qmail-send
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
#!/bin/sh
exec \
setuidgid qmaill \
multilog t ./main '-*' '+* status: *' =status
qmail-smtpd
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
tcpserver -vR -c40 -x./tcp.cdb -u7791 -g2108 0 smtp qmail-smtpd 2>&1
#!/bin/sh
exec \
setuidgid smtplog \
multilog t ./main '-*' '+* * status: *' =status
3.4. $B%5!<%S%9$N@)8f(B
svc opts services
$B%*%W%7%g%s(B
$B0UL#(B
$BF0:n(B
-u
Up
$B%5!<%S%9$,5/F0$7$F$$$J$1$l$P!"3+;O$7$^$9!#%5!<%S%9$,Dd;_$7$F$$$l$P!":F3+$7$^$9!#(B
-d
Down
$B%5!<%S%9$,5/F0$7$F$$$l$P!"(BTERM $B%7%0%J%k$rAw$j!"$=$l$+$i(B CONT $B%7%0%J%k$rAw$j$^$9!#Dd;_$7$?8e$O:F3+$7$^$;$s!#(B
-o
Once
$B%5!<%S%9$,5/F0$7$F$$$J$1$l$P!"3+;O$7$^$9!#%5!<%S%9$,Dd;_$7$F$$$l$P!":F3+$7$^$;$s!#(B
-p
Pause
$B%5!<%S%9$K(B STOP $B%7%0%J%k$rAw$j$^$9!#(B
-c
Continue
$B%5!<%S%9$K(B CONT $B%7%0%J%k$rAw$j$^$9!#(B
-h
Hangup
$B%5!<%S%9$K(B HUP $B%7%0%J%k$rAw$j$^$9!#(B
-a
Alarm
$B%5!<%S%9$K(B ALRM $B%7%0%J%k$rAw$j$^$9!#(B
-i
Interrupt
$B%5!<%S%9$K(B INT $B%7%0%J%k$rAw$j$^$9!#(B
-t
Terminate
$B%5!<%S%9$K(B TERM $B%7%0%J%k$rAw$j$^$9!#(B
-k
Kill
$B%5!<%S%9$K(B KILL $B%7%0%J%k$rAw$j$^$9!#(B
-x
Exit
$B%5!<%S%9$,%@%&%s$7$?$i$9$0$K(B supervise $B$O=*N;$7$^$9!#(B
$B%7%0%J%k(B
$BCM(B
$B0UL#(B
SIGSTOP
17
$B%W%m%;%9$NDd;_(B
SIGCONT
19
$BDd;_>uBV$+$i$N:F3+(B
SIGHUP
1
$B@)8f$7$F$$$kC
SIGALRM
14
alarm(2)$B$+$i$N%?%$%^!<%7%0%J%k(B
SIGINT
2
$B%-!<%\!<%I$+$i$N3d$j9~$_(B
SIGTERM
15
$B=*N;%7%0%J%k(B
SIGKILL
9
Kill$B%7%0%J%k(B
# svc -u /service/ftpd
# svc -dx /service/*/log
# kill pid_of_svscan
4. $B%m%0$N<}=8(B
4.1. multilog
multilog script
$BF0:n$N35MW(B
$BF0:n(B
$BHw9M(B
$B%?%$%`%9%?%s%W(B
t
$B3F9T$N@hF,$K(BTAI64N$B7A<0$N%?%$%`%9%?%s%W$rIU$1$k!#(B($B:G=i$NF0:n$H$7$F5-=R$7$?>l9g$N$_M-8z(B)
$B9T$NA*Br(B
-pattern
pattern $B$,9T$K9g$($P$=$N9T$NA*Br$,2r=|$5$l$k!#(B
+pattern
pattern $B$,9T$K9g$($P$=$N9T$OA*Br$5$l$k!#(B
$B<+F0@Z$jBX$($NF0:n(B
ssize
$B:GBg%U%!%$%k%5%$%:$N@_Dj!#%G%U%)%k%H(B99999$B!#(B
nnum
$B%m%0%U%!%$%k$N:GBg?t!#%G%U%)%k%H(B10$B!#(B
!processor
$B%W%m%;%C%5$N@_Dj(B
$B%m%0(B
dir
$B%m%0(B dir $B$XA*Br$5$l$?9T$rDI2C$9$k!#%I%C%H$d%9%i%C%7%e$G;O$^$kI,MW$,$"$k!#(B
$B7Y9p(B
e
$BI8=`%(%i!<$KA*Br$5$l$?3F9T!J$N:G=i$N(B200$B%P%$%H!K$r=PNO$9$k!#(B
Status$B%U%!%$%k(B
=file
file $B$NCf?H$rA*Br$5$l$?3F9T!J$N:G=i$N(B1000$B%P%$%H!K$GCV$-49$($k!#(B
+hello
$B$O(B hello $B$rA*Br$7$^$9!#(Bhello world $B$OA*Br$7$^$;$s!#(B
-'* * > *'
$B$O(B
@400000003879ded713291cfc 4357 > -ERR authorization failed
$B$NA*Br$r2r=|$7$^$9!#0l$DL\$HFs$DL\$N(B * $B$O$=$ND>8e$N%9%Z!<%9$r4^$^$J$$G$0U$NJ8;zNs$K0lCW$7$^$9!#(B
'-*'
$B$OA4$F$N9T$NA*Br$r2r=|$7$^$9!#FCDj$N%Q%?!<%s$N$_$rA*Br$9$k>l9g$ODL>o!":G=i$K$3$NF0:n$r5-=R$7$FA4$F$NA*Br$r2r=|$7$F$+$i!"A*Br$9$k%Q%?!<%s$rDI2C$7$F$$$-$^$9!#(B
-'*' +'* status: *' =status
$B$O(B
@400000003914053c22ab2904 status: local 0/10 remote 0/20
$B$rA*Br$7!"(Bstatus $B$H$$$&%U%!%$%k$NFbMF$rCV$-49$($^$9!#$D$^$j!"(Bstatus $B$H$$$&%U%!%$%k$K$O>o$K:G?7$N(B status: $B9T$,3JG<$5$l$k$3$H$K$J$j$^$9!#(B
4.2. .log/run $B$N:[email protected](B
qmail-send
#!/bin/sh
exec \
setuidgid qmaill \
multilog t ./main \
-'* status: *' \
-'* starting delivery *' \
-'* delivery * success*' \
-'* delivery * failure*' \
-'* new msg *' \
-'* info msg *' \
-'* end msg *' \
-'* bounce msg *' \
-"* delivery * deferral: Sorry,_I_couldn't_find_any_host_by_that_name*" \
-"* delivery * deferral: Sorry,_I_wasn't_able_to_establish_an_SMTP_*" \
./alert \
-'*' \
+'* status: *' \
=status
qmail-smtpd
#!/bin/sh
exec \
setuidgid smtplog \
multilog t \
-'* * > *' \
-'* * < *' \
s200000 \
./main \
-'*' \
+'* * < HELO *' \
+'* * < EHLO *' \
+'* * < MAIL *' \
+'* * < RCPT *' \
+'* * < DATA*' \
+'* * < QUIT*' \
+'* * < RSET*' \
+'* * < NOOP*' \
+'* * > 1*' \
+'* * > 2*' \
+'* * > 3*' \
+'* * > 4*' \
+'* * > 5*' \
s200000 \
./tcp \
-'*' \
+'* * status: *' \
=status
5. $B4D6-JQ?t!&;q8;@)8B(B ($B:[email protected]=Dj(B)
Thanks to M.Sugimoto.