LinuxForum.Fans
Тема

Автоматический перезапуск команды при ошибке её выполнения в скрипте

Автор: deblanck 6 сообщений 3512 просмотров
#329495

Доброго времени суток.Собственно,такой вопрос:как сделать автоматический перезапуск одной из включённых в crontab команд,в случае ошибки.Например,должно быть выполнено обновление списка репозиториев (apt-get update) и апгрейд (aptitude full-upgrade),но часто бывает так,что один или несколько репозиториев в данный момент временно недоступны (обновляются списки пакетов и т.п.) и выдаётся ошибка,а если повторить через пару минут,то всё нормально.Так вот,как сделать обязательным условием перезапуск этой команды,до успешного её выполнения,перед переходом к следующей,что бы избежать аварийного завершения всего скрипта с ошибкой?

#329565
deblanck написал:
Доброго времени суток.Собственно,такой вопрос:как сделать автоматический перезапуск одной из включённых в crontab команд,в случае ошибки.Например,должно быть выполнено обновление списка репозиториев (apt-get update) и апгрейд (aptitude full-upgrade),но часто бывает так,что один или несколько репозиториев в данный момент временно недоступны (обновляются списки пакетов и т.п.) и выдаётся ошибка,а если повторить через пару минут,то всё нормально.Так вот,как сделать обязательным условием перезапуск этой команды,до успешного её выполнения,перед переходом к следующей,что бы избежать аварийного завершения всего скрипта с ошибкой?

В скртипте проверить код возврата и в случае ошибки запусть заново через at(man at). И выйти. Через now+nn минут запустится скрипт заново.

#330017

Типа:

text

#!/bin/sh

apt-get update res=$?

if [ "$res" -eq 0 ]; then aptitude full-upgrade else at now `apt-get update` fi

?
Что-то не работает,ЧЯДНТ?
Вывод :

text

$# at now  `apt-get update`
warning: commands will be executed using /bin/sh
at> 

Оно вроде задание отрабатывает,судя по

text
ps -A | grep apt

но не выходит по завершении...

#330045
"deblanck⇓" написал:
at now `apt-get update`

Тут можно использовать следующий синтаксис:
at now "+ 2minutes" <<<"команда &"

#330047

Спасибки,счаз будем пробовать...

#330266
text

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-ов и постоянного ввода пары команд ручками в консоли - самое то,ИМХО.

Войдите или зарегистрируйтесь, чтобы ответить.