先日、迷惑メール送信元をブロックするという話を書いたんだけども、このinotifywaitでやる方法はイマイチだなと。というのもスクリプトが自動起動してくれないからで、これをsystemdでなんとか出来ないかmanを調べていたらsystemd.path
というのを見つけた(なので詳細はman 5 systemd.path
ね)。うわー、ほんと何でもあるなsystemd…。
まず、/etc/systemd/user/spam-monitor.service
を作る。
[Unit]
Description="Execute a script to block the IP address where a spam came from"
[Service]
ExecStartPre=/root/bin/block-spam-ip
ExecStart=/root/bin/sync-fw
[Install]
WantedBy=multi-user.target
WantedBy=default.target
そして、/etc/systemd/user/spam-monitor.path
も作る。
[Unit]
Description="Monitor spams in Maildir/.Junk/cur"
[Path]
PathChanged=/home/rio/Maildir/.Junk/cur/
Unit=spam-monitor.service
[Install]
WantedBy=multi-user.target
WantedBy=default.target
追記(2021.11.10):multi-user.targetはuserのunitでは使えないので、再起動した時に自動的に起動してこない。代わりにdefault.targetを用いる。
両方ともchconしておく。
$ sudo chcon system_u:object_r:etc_t:s0 /etc/systemd/user/spam-monitor.*
enableする。
$ sudo systemctl --user daemon-reload
$ sudo systemctl --user --now enable spam-monitor.service
$ sudo systemctl --user --now enable spam-monitor.path
spamが届くと/var/log/messages
に…
Nov 10 01:47:41 www systemd[265205]: Started "Execute a script to block the IP address where a spam came from".
おおう、発火した。inofityを使ってるという点ではinofitywaitと同じなんだけど、systemdが起動してくれるんで楽。こりゃ、良いもの見つけたw