[Comm] synaptic

Alexander Kharkov =?iso-8859-1?q?umount_=CE=C1_bk=2Eru?=
Пт Окт 3 01:42:06 MSD 2003


В сообщении от 29 Сентябрь 2003 23:34 Alexander Kharkov написал(a):
> В сообщении от 28 Сентябрь 2003 18:36 Pyatnitskich Evgeniy написал(a):
> > Опубликуйте, пожалуйста.
>
> в аттаче
>  исправления ошибок, ежели найдете или там добавления какие - высылайте,
> буду рад
люди, просящие меня прислать скрипт, да посмотрите пост, мой преддыдущий для 
особо непонятливых привожу его тут целиком, я не имею возможности отвечать 
всем лично к сожалению
------------------------------------кусь--------------------------------
#!/bin/sh

# Скрипт для дозвона до провайдера с скачиванием апдейтов для сизифа
# с последующим отключением от линии. При возникновении ошибок линия
# сбрасывается, и дозвон осуществляеся снова
# Copyright (c) Alexander Kharkov 2003

# Установка переменных

PATH=/bin:/sbin:/usr/bin:/usr/sbin

FREETIME=9
DROPLINE=0
POWEROFF=0
MAXTRYNO=5
DEBUG=0
PIDFILE=/var/run/netnight.pid
CURRUNPID=0

# Функция   проверяет   наличие   интерфеса  ppp0
# Если  интерфес  не  поднят - возвращает  ошибку
# Может  подождать с  определением,  если указать
# один  числовой параметр. В этом  случае функция
# ждет указанное количество секунд и только после
# этого проверяет интерфейс

is_ppp_up()
{
  if [ $DEBUG -eq 1 ]; then
    echo "in is_ppp_up()"
  fi
  if [ $# -lt 1 ]; then
    if [ $DEBUG -eq 1 ]; then
      echo We will not sleep!!!
    fi
  else
    expr $1 + 1 > /dev/null 2>&1
    STATUS=$?
    if [ "$STATUS" != "0" ]; then
      echo `basename $0` : First parameter is not valid >&2
      echo `basename $0` : $1 is not a number!!!! >&2
      echo `basename $0` : Setting default interval - 1 minute >&2
      INTERVAL=60
    else
      INTERVAL=$1
    fi
    if [ $DEBUG -eq 1 ]; then
      echo "Sleeping for $INTERVAL second(s)"
    fi
    sleep $INTERVAL
  fi
  if ifconfig | grep ppp0 > /dev/null 2>&1
  then
    if [ $DEBUG -eq 1 ]; then
      echo We are online at `date`
    fi
    return 0
  else
    if [ $DEBUG -eq 1 ]; then
      echo We are offline at `date`
    fi
    return 1
  fi
  if [ $DEBUG -eq 1 ]; then
    echo "out is_ppp_up()"
  fi
}

# Функция  поднимает интерфейс ppp0.  В случае если он
# уже поднят функция или перезавниевает, если функции
# переается аргумент или не делает ничего

ppp_up()
{
  if [ $DEBUG -eq 1 ]; then
    echo "in ppp_up()"
  fi
  if [ $# -lt 1 ]; then
    if [ $DEBUG -eq 1 ]; then
      echo We will drop line!!!!
      echo Trying to down ppp0 at `date`
    fi
    STATUS=1
    while [ "$STATUS" != "0" ];
    do
      ifdown ppp0
      STATUS=$?
    done
    echo ppp0 down at `date`
  else
    if [ $DEBUG -eq 1 ]; then
      echo We will not drop line!!!
    fi
  fi
  echo Trying to connect to Internet
  if is_ppp_up > /dev/null
  then
    if [ $DEBUG -eq 1 ]; then
      echo `basename $0` : We are already online
      echo `basename $0` : If you want to REdial call ppp_up without
      echo `basename $0` : any parameters
    fi
    return 1
  fi
  STATUS=1
  while [ $STATUS -ne 0 ];
  do
    ifup ppp0
    STATUS=$?
    if [ $STATUS -ne 0 ]; then
      ifdown ppp0
      sleep 30
    fi
  done
  echo ppp0 is upped at `date`
  if [ $DEBUG -eq 1 ]; then
    echo "out ppp_up()"
  fi
  return 0
}

# Функция выводит краткую справку по программе

usage()
{
  echo "Program to automatic dialing and downloading"
  echo "updates for Alt Linux Sisyphus".
  echo "You can use this parameters:"
  echo "-h or --help - this screen"
  echo "-d or --dropline - disconnect  from  Internet  while"
  echo "                   download all uodates successfully"
  echo "-p or --poweroff - power   off  the   machine  after"
  echo "                   downloading updates"
  echo "--debug          - display debug information"
  exit 0
}

# Функция на выходе из программы

atexit()
{
  if [ $DROPLINE -eq 1 ] ; then
    ifdown ppp0
  fi
  rm -f $PIDFILE
# по идее надо бы удалять pid файл в самом конце
# но в связи "необычностью" выхода с выклчением
# PID файл удалаяется до того, как отработает
# вся программа

  if [ $POWEROFF -eq 1 ] ; then
    poweroff
  fi
}

# Функция при старте
atstart()
{
  echo Starting script at `date`
  echo $$ > $PIDFILE
  ppp_up 1
}

# Запускает строки, которые предаются функции в качестве параметров

runcommand()
{
  if [ $DEBUG -eq 1 ]; then
    echo "Entering runcommand at `date`"
  fi
  if [ $# -eq 0 ] ; then
    echo "`basename $0` : Command not defined in run function runcommand" >&2
    exit 1
  fi
  if [ $DEBUG -eq 1 ]; then
    echo "Entering while cycle in runcommand"
  fi
  while [ $# -gt 0 ]; do
    STAT=1
    if [ $DEBUG -eq 1 ]; then
      echo "Entering buildin while cycle in func runcommand"
    fi
    TRYNO=0
    while [ $STAT -ne 0 ]; do
      $1
      STAT=$?
      if [ $STAT -ne 0 ]; then
        TRYNO=`expr $TRYNO + 1`
        if [ $DEBUG -eq 1 ]; then
          echo Running $1 unsuccessfull
	fi
        CURHOUR=`date +%k`
        if [ $CURHOUR -lt $FREETIME ]; then
          echo "Redialing"
          ppp_up
        else
          echo "Free time is out!"
          echo "Current time: `date +%T`"
          atexit
          exit 0
        fi
      fi
      if [ $TRYNO -eq $MAXTRYNO ]; then
        echo "We have maximum number of errors!!! Skipping command $1"
        return 1
      fi
    done
    if [ $DEBUG -eq 1 ]; then
      echo "Leaving buildin while cycle in func runcommand"
    fi
    shift
  done
  if [ $DEBUG -eq 1 ]; then
    echo "Leaving while cycle in runcommand"
    echo "Leaving runcommand at `date`"
  fi
}

# Основная программа

while [ $# -gt 0 ];
do
  case $1 in
    -d|--dropline) DROPLINE=1
    ;;
    -p|--poweroff) POWEROFF=1
    ;;
    -h|--help) usage
    ;;
    --debug) DEBUG=1
    ;;
    *) echo "$1 - is not a valid parameter! Try ---help for more information" 
>&2; atexit; exit 1
  esac
  shift
done
atstart
runcommand "apt-get -q update"
runcommand "apt-get -y autoclean"
runcommand "apt-get -q -y -d dist-upgrade"
runcommand "apt-get -q -y -d install kernel-modules-.*-std-up"
#здесь можно загнать другие команды
atexit



------------------------------------кусь---------------------------------- 
-----------------
Всех благ, Alexander




Подробная информация о списке рассылки community