As linux systems admin you may have multiple servers, in this case it would make sense to automate updates. But even with the best monitoring failed updates can occasionally go unnoticed, with crontab and the below script; this can be avoided.
Create the script with you choice of editor:
/bin/timeout 120 /bin/yum update --assumeno &> /tmp/check-update || /bin/mail -s "$(echo -e "Check to see if updates work, failed\nX-Priority: 1")" < /tmp/check-update root
/usr/bin/timeout 120 /usr/bin/yum update --assumeno &> /tmp/check-update || /bin/mail -s "$(echo -e "Check to see if updates work, failed\nX-Priority: 1")" < /tmp/check-update root
Lets breakdown the script before we go any further:
timeout 120 – This causes yum to automatically closes after 2 minutes, this prevents the script from causing the automatic update from failing.
yum update –assumeno – The script is only for testing updating works, not to install updates; this is what the assume no flag does.
&> /tmp/check-update – Writes (also overwrites) error and standard output to /tmp/check-update
|| /bin/mail -s “$(echo -e “Check to see if updates work, failed\nX-Priority: 1″)” < /tmp/check-update root – Email is only sent if for any reason updates would fail, subject is set to: Check to see if updates work, failed. Importance Priority 1 is set in the header of the email. Uses /tmp/check-update as the body of the email. Then sends the email to root, normally an alias would be used for root so the email is sent to the system administrator; but alias’s are not covered here.
Make the script only executable by root:
$ chmod u+x /usr/local/sbin/ifupdateswork.sh
Now schedule using crontab, I suggest running this script about an hour before the automated updates so for example mine looks like this:
0 0 * * * /bin/bash /usr/local/sbin/ifupdateswork.sh
On this particular server automated updates run at 12:51 am every day.
Thats it, all done. If there are now any issues with updates an email alert will be sent and only then.
P.S Please feel free to comment.