apt-get -u upgrade を実行するとリストが表示され、[Y/n] で入力待ちになるので、echo n をパイプで突っ込んどいて、Abort させる。すると、exit 1 がかえってくるんで、if でひっかけて mail する。
更新がなければ exit 0 なので、何もしない。
あとは、cron ででも動かしておけばいい。
めずらしくシェルで作成。説明するまでもないっすね…。
#!/bin/sh
/usr/bin/apt-get update > /dev/null 2>&1
echo n | /usr/bin/apt-get -u upgrade > /tmp/apt-cron_$$ 2>&1
if [ $? -eq 1 ]; then
/usr/bin/mail -s apt-cron root < /tmp/apt-cron_$$
fi
/bin/rm /tmp/apt-cron_$$
ちなみに、
$$ … シェル自身のPID
$? … 最後に実行したコマンドの exit 値
ほかによく使うのは、
$n (n:0〜9) … 引数(0 はコマンド自身)
他は使ったことすらねぇ。つーか知らない。
mailコマンドは、
-s … Subject
-c … Cc
-b … Bcc
mail -s 件名 宛先 < 本文
書くまでもねぇな
つーか、これ実装した後にアップデートしたパッケージがないから、ちゃんと動くかどーかわからん。
06/07 に
gzip のアップデートで動作確認しました。
でも、正直データ量が多いので(ケータイに飛ばしてる)、mailコマンドを実行する前に、以下のようにガリガリやってる。
(実際は一行)
/bin/grep -v ^Reading /tmp/apt-cron_$$ | /bin/grep -v ^Building |
/bin/grep -v ^Need | /bin/grep -v "^Do you" | /usr/bin/mail -s apt-cron root
ちなみに、飛んでくるメールはこんな感じ。
The following packages will be upgraded
gzip
1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
便利です。