• 作成:

スパムメールの学習コマンド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