スパムメールの学習コマンドsa-learnの実行をsystemd.timerで自動化しました
SpamAssassin
のメール学習を行うコマンドラインプログラムであるsa-learn
をこれまで手動で実行していました.
alias sa-learn-maildir='sa-learn --ham ~/.maildir/cur --spam ~/.maildir/.Junk/cur --progress'
というaliasを書いて, 時々実行していました.
あまり迷惑メールは来てませんでしたし, 分類する前に学習してしまうのも嫌でした.
しかし, 最近迷惑メールが結構来るので, 1日1回学習プログラムを動かしておくことにしました.
最初はuser内部のメールや学習ファイルを扱うため,
systemd --user
で管理するuserのunitを作ろうと思いました.
しかし,
これはデスクトップなど,
使っている時は常にユーザがログインしているコンピュータ向けの仕組みなので,
サーバのタイマ向けには不向きなので,
やめました.
/etc/systemd/system/sa-learn.service
に以下を設置します.
ユーザ権限で動かすことでユーザ権限で学習ファイルが書き込まれます.
[Unit]
Description=sa-learn
[Service]
User=ncaq
Group=ncaq
Type=oneshot
Nice=19
ExecStart=/usr/bin/sa-learn --ham ~/.maildir/cur --spam ~/.maildir/.Junk/cur
/etc/systemd/system/sa-learn.timer
に以下を設置します.
[Unit]
Description=sa-learn timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
これで1日1回スパムメールを学習できるはずです.
systemdのタイマーの書き方は忘却してしまったので, 例によってArchWikiを参考にしました. systemd/タイマー - ArchWiki