Permettez-moi de commencer par dire que j'ai été interdit Pour activer les mises à jour automatiques sur nos serveurs Ubuntu, pour les packages de sécurité et réguliers.
Lorsque je me connecte à l'un de mes quatre serveurs Ubuntu, le message de bienvenue contient ceci:
39 packages can be updated.
26 updates are security updates.
Cependant, lorsque j'exécute le plugin Nagios qui surveille APT, je reçois:
% /usr/lib/nagios/plugins/check_apt
APT WARNING: 33 packages available for upgrade (0 critical updates).
J'ai besoin de savoir comment détecter correctement qu'il existe des mises à jour de sécurité en attente et des mises à jour régulières. Une fois que je peux faire cela, je prévois d'écrire un script Nagios qui retournera [~ # ~ # ~ ~] Pour en attente de mises à jour régulières et [~ # ~ # ~] critique [~ # ~] pour en attente de mises à jour de sécurité.
Quelqu'un sache comment détecter ces deux conditions?
Le plugin nagios /usr/lib/nagios/plugins/check_apt
Ne détecte pas les mises à jour critiques à Ubuntu correctement dus à la manière dont il détecte les mises à jour critiques via apt
combinée à la publication des mises à jour non critiques Ubuntu. Plus de détails sont dans le bogue ici: https://bugs.launchpad.net/bugs/103168
En utilisant /usr/lib/update-notifier/apt-check
Au lieu de cela, c'est une solution de contournement fiable.
Il est possible que le nombre de pendants mises à jour régulières peut être trouvée en utilisant:
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1
Et le nombre d'attentes mises à jour de sécurité peut être trouvée en utilisant:
/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2
En fin de compte, mon plugin Nagios était comme suit:
#!/bin/sh
#
# Standard Nagios plugin return codes.
STATUS_OK=0
STATUS_WARNING=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3
# Query pending updates.
updates=$(/usr/lib/update-notifier/apt-check 2>&1)
if [ $? -ne 0 ]; then
echo "Querying pending updates failed."
exit $STATUS_UNKNOWN
fi
# Check for the case where there are no updates.
if [ "$updates" = "0;0" ]; then
echo "All packages are up-to-date."
exit $STATUS_OK
fi
# Check for pending security updates.
pending=$(echo "${updates}" | cut -d ";" -f 2)
if [ "$pending" != "0" ]; then
echo "${pending} security update(s) pending."
exit $STATUS_CRITICAL
fi
# Check for pending non-security updates.
pending=$(echo "${updates}" | cut -d ";" -f 1)
if [ "$pending" != "0" ]; then
echo "${pending} non-security update(s) pending."
exit $STATUS_WARNING
fi
# If we've gotten here, we did something wrong since our "0;0" check should have
# matched at the very least.
echo "Script failed, manual intervention required."
exit $STATUS_UNKNOWN
Pourquoi ne pas simplement utiliser la commande apt-get?:
apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Une fois que Nagios a signalé que vous avez des mises à jour de sécurité, c'est ainsi que vous obtenez une liste desquelles sont nécessaires.
grep security /etc/apt/sources.list > /tmp/security.list
Sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s
Vous pouvez également utiliser ces commandes de ces commandes dans WC -L pour vous donner un compte, mais les réponses ci-dessus sont probablement plus efficaces et appropriées pour un script Nagios.