12.04 LTS ubuntuサーバーを実行しています。そして、更新プログラムが利用可能になったときに通知を受けることができればいいと思います。しかし、私は知る方法を見つけることができません...
apt-get
manページを見てみました。それから、apt-get -s upgrade
を使用して、質問をブロックすることなく、スクリプトでapt-get出力を取得できました。
今、私は明らかに違いを見る:
アップデートが利用可能です:
apt-get -s upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
dpkg dpkg-dev libdpkg-Perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [AMD64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [AMD64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-Perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-Perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
アップデートは利用できません:
apt-get -s upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
しかし、そこから先に進む方法はわかりません。 bashスクリプト(またはphpスクリプト)から、利用可能な更新があるかどうかをどのように確認できますか?
編集:
これが私の現在のbashコードです。動作しません。
updates_available=`/etc/update-motd.d/90-updates-available`
if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
echo "No updates are available"
else
echo "There are updates available"
fi
motd(5)
、 pam_motd(8)
および update-motd(5)
のmanページを読んでください。私のシステムでは、/etc/update-motd.d/90-updates-available
が/usr/lib/update-notifier/update-motd-updates-available
を呼び出し、ログイン時にこれが表示されます。
19 packages can be updated.
12 updates are security updates.
もう少し詳しく調べると、「...- updates-available」スクリプトは/usr/lib/update-notifier/apt-check --human-readable
を呼び出します。これを読むと(python)、人間が読めるフラグを省略すると、「19; 12」がstderrに出力されることがわかります。これでそれをつかむことができます:
IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates
19
12
今、あなたは言うことができます:
if (( updates == 0 )); then
echo "No updates are available"
else
echo "There are updates available"
fi