run-xxxxx.service が大量に発生したときの対処方法

AmazonLinuxで

systemctl list-unit-files --type=service

とかでサービス一覧を出したときにこんなんが大量に出ることがあります。 ※あまりに数が多くコマンドがハングしたように見えることも・・・。

run-5028.service                              static  
run-505.service                               static  
run-5072.service                              static  
run-508.service                               static  
run-5114.service                              static  
run-5124.service                              static  
run-5166.service                              static  
run-5253.service                              static  
run-5322.service                              static  
run-5345.service                              static  
run-5374.service                              static  
run-5474.service                              static

これは update-motd からの yum コマンドでコケたりするとできるようです。
以下のコマンドなどでなんなのかを見れます。

systemctl status run-5474.service

エラーとしては「yum locked retry of update-motd」というもののようです。
まあこの処理が問題のようです。

/etc/update-motd.d/70-available-updates 
---
if test -s /var/run/yum.pid; then
        logger -t update-motd "Yum database was locked, so we couldn't get fresh package info." &>/dev/null
        # An asynchronous retry "loop". It's okay if this fails.
        systemd-run --description "yum locked retry of update-motd" --on-active=30 --timer-property=AccuracySec=10s --quiet /usr/sbin/update-motd &>/dev/null
        exit
fi
---

なんらかの理由で yum が使えない状態のときにこれでサービスが作られまくるようです。
で、勝手に消えてくれないようですので以下のコマンドで一括で削除可能です。

systemctl stop run-*.timer

これで消えない場合は以下のように手動削除

[確認]
find /run/systemd/system -mindepth 1 -maxdepth 1 -mtime +30 -type f -name 'run-*' | xargs -p rm -f 
find /run/systemd/system -mindepth 1 -maxdepth 1 -mtime +30 -type d -name 'run-*' | xargs -p rm -rf

[実行]
find /run/systemd/system -mindepth 1 -maxdepth 1 -mtime +30 -type f -name 'run-*' | xargs rm -f 
find /run/systemd/system -mindepth 1 -maxdepth 1 -mtime +30 -type d -name 'run-*' | xargs rm -rf

この問題を発生させないためにはアップデートをおこなうのが手っ取り早いのですが、 それができない事情がある場合は、

update-motd --disable

で update-motd を無効化するか、

/etc/update-motd.d/70-available-updates

を削除するかになります。

systemctl stop update-motd.service
systemctl disable update-motd.service

では効果はありません。