• 作成日時:
  • 更新日時:

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