Доброго времени суток.Собственно,такой вопрос:как сделать автоматический перезапуск одной из включённых в crontab команд,в случае ошибки.Например,должно быть выполнено обновление списка репозиториев (apt-get update) и апгрейд (aptitude full-upgrade),но часто бывает так,что один или несколько репозиториев в данный момент временно недоступны (обновляются списки пакетов и т.п.) и выдаётся ошибка,а если повторить через пару минут,то всё нормально.Так вот,как сделать обязательным условием перезапуск этой команды,до успешного её выполнения,перед переходом к следующей,что бы избежать аварийного завершения всего скрипта с ошибкой?
Автоматический перезапуск команды при ошибке её выполнения в скрипте
Доброго времени суток.Собственно,такой вопрос:как сделать автоматический перезапуск одной из включённых в crontab команд,в случае ошибки.Например,должно быть выполнено обновление списка репозиториев (apt-get update) и апгрейд (aptitude full-upgrade),но часто бывает так,что один или несколько репозиториев в данный момент временно недоступны (обновляются списки пакетов и т.п.) и выдаётся ошибка,а если повторить через пару минут,то всё нормально.Так вот,как сделать обязательным условием перезапуск этой команды,до успешного её выполнения,перед переходом к следующей,что бы избежать аварийного завершения всего скрипта с ошибкой?
В скртипте проверить код возврата и в случае ошибки запусть заново через at(man at). И выйти. Через now+nn минут запустится скрипт заново.
Типа:
#!/bin/sh
apt-get update
res=$?
if [ "$res" -eq 0 ]; then
aptitude full-upgrade
else
at now `apt-get update`
fi
?
Что-то не работает,ЧЯДНТ?
Вывод :
$# at now `apt-get update`
warning: commands will be executed using /bin/sh
at>
Оно вроде задание отрабатывает,судя по
ps -A | grep aptно не выходит по завершении...
at now `apt-get update`
Тут можно использовать следующий синтаксис:
at now "+ 2minutes" <<<"команда &"
Спасибки,счаз будем пробовать...
sudo service atd start
sudo update-rc.d atd defaults
sudo update-rc.d cron defaults
cat > updaemon
!/bin/sh
apt-get update
res=$?
if [ "$res" -eq 0 ]; then
aptitude full-upgrade -y
else
while :; do
apt-get update && aptitude full-upgrade -y
done
fi
Enter
Ctrl+C
cat > kupdaemon
!/bin/sh
at noon <<<"killall updaemon"
at midnight <<<"cd;./updaemon"
daily-processing
fi
Enter
Ctrl+C
chmod +x updaemon kupdaemon && sudo cp updaemon /usr/local/bin;sudo cp kupdaemon /usr/local/bin
crontab -e
@reboot updaemon;kupdaemon
Ctrl+X -> Shift+Y-> Enter
Всем спасибо,всё работает.Для поддержания системы в актуальном состоянии,без всяких update-notifier-ов,ЦП и synaptic-ов и постоянного ввода пары команд ручками в консоли - самое то,ИМХО.