bash-скрипты
Daevy 4 сентября, 2008 - 14:40
Народ, тут тема где парню надо было узнать место на винте сподвигла на идею! Давайте выкладывать свои полезные скриптики у кого какие есть. Чтоб добро не пропадало, чтоб люди их могли улучшать и юзать! Да здравствует GNU/GPL! %)
Начну первый
Скрипт выполняет открыт ли порт какой либо сетевой службы и при случае если он свалился перезапускает ответственную за него службу. #!/bin/bash RES="/tmp/result" HOST="localhost" SERVICE="sendmail" PORT="25" telnet $HOST $PORT &> $RES & #1 sleep 5 #2 if cat $RES |grep Unable; then /etc/init.d/$SERVICE restart #3 else echo "OK"; rm $RES; exit; #4 fi
#1 - проверяем телнетом, результат пишем во временный файл и уходим в фон
#2 - ждем 5 сек, перед тем как почесть файл (ответ от телнета уже должен записаться)
#3 - парсим файл по значению Unable, если удачно, то перезапускаем сервис
#4 - если Unable нету, то удаляем временный файл и выходим
#после выхода из скрипта фоновый процесс телнета завершается будучи дочерним от процесса скрипта
* после рестарта службы можно добавить отсылку письма или запись в лог.
»
- Для комментирования войдите или зарегистрируйтесь
Оптимизация
s/'cat $RES |grep Unable'/'grep Unable $RES'
Я бы делал
Я бы делал через netstat.
+
выбрал телнет потому что были случаи с индейцем, что netstat показывает что порт открыт, а на самом деле сокет мертв(((
Вот мой
Вот мой вариант
# cat watchdog
#!/bin/bash
nmap -p $2 localhost |grep open
if [ `echo $?` = 1 ]
then
/etc/init.d/$1 restart
fi
10:10:19 Astarte kos # time sh watchdog postfix 25
postfix restart
real 0m0.047s
user 0m0.041s
sys 0m0.006s
10:10:40 Astarte kos # time sh watchdog1
telnet: Unable to connect to remote host: Address family not supported by protocol
/etc/init.d/sendmail restart
real 0m5.007s
user 0m0.004s
sys 0m0.005s
Работоспособность службы не
Работоспособность службы не ограничивается наличием открытого порта. Что нить поизощренней типа wget, с последующим разбором результата. Плюс оповещалку, плюс сохранение инцитдента в какой нить базе. Заббикс можно научить.
Хорошая
Хорошая тема.
Извиняюсь за оффтоп, но нет ли у кого случайно скрипта который выводит список пакетов от которых никакие другие пакеты не зависят?
Или может есть какое-то готовое средство? Просто иногда попробуешь какую-нибудь программу, потом удалишь, а то что она за собой утянула остается и болтается в системе без всякой надобности. Перебирать каждый интересующий пакет руками через equery d не очень то хочется.
revdep-rebuild, не?
revdep-rebuild, не?
Нее, emerge --depclean -a
Нее, emerge --depclean -a
Да он только
Да он только всё грозиться удалить "важные пакеты", но на самом деле практически ничего и не удаляет)
А revdep-rebuild вообще в моей практике ничего ни разу не удалял, только пересобирал.
Попробую что-нибудь придумать
Он как раз
Он как раз делает то, что вы и просили. Удаляет зависимости пакета. Если делать вот так:
emerge --depclean
revdep-rebuild
emerge -uDNv world
То почистите систему и ничего не просрется [-:
:)
Самое весёлое, что приведённая последовательность команд полнотой не отличается :)
--
Live free or die
DreamDragon
vim /var/lib/portage/world
если ты все ставил правильно, то получишь список пакетов, от которых никто не зависит ))остальные пакеты удаляются по
emerge --depclean
;)не совсем
Не совсем. Легко может быть ситуация, при которой тебе нужен какой-то пакет и его зависимость. Соответственно, и пакет и зависимость будут в world (например, с perl-либами такое у меня бывает)
еще один скриптос :-)
тут не совсем bash скрипт, суть в следующем, скрипт проверяет есть ли впн-каналы до удаленных точек, если нет то проверяет доступность точки, если точка доступна то пытается перезапустить канал. если вовсе недоступна то выводит сообщение
вобще в оригинальном скрипте около 20 филиалов и для каждого свой блок кода, так вот задачка для ума, можно оптимизировать скрипт через цикл, чтобы шел перебор доступных филиалов, дабы не прописывать каждый филиал отдельно
ps. забыл упомянуть в качестве впн-сервиса используется strongswan, синтаксис конфигов практически одинаков с freeswan/openswan
ну под такую
ну под такую радость вообще нужно выделять блог и мал по мал собирать разные полезности. эх, если б кто взялся
# cat
# cat /etc/init.d/myshaper
#!/sbin/runscript
IFACE="eth1"
start() {
ebegin "Shaper Starting..."
# определение переменных
DPORT="match ip dport"
SPORT="match ip sport"
U32="protocol ip u32"
ICMP="match ip protocol 1 0xff"
TCP="match ip protocol 6 0xff"
UDP="match ip protocol 17 0xff"
RATE_OUT="700" # скорость исходящего трафика
tc qdisc add dev $IFACE root handle 1: htb default 13
tc class add dev $IFACE parent 1: classid 1:1 htb rate ${RATE_OUT}kbit
#делим канал на 4 части
tc class add dev $IFACE parent 1:1 classid 1:10 htb rate $[$RATE_OUT/9]kbit ceil $[$RATE_OUT/2]kbit prio 0
tc class add dev $IFACE parent 1:1 classid 1:11 htb rate 20kbit prio 1
tc class add dev $IFACE parent 1:1 classid 1:12 htb rate $[$RATE_OUT/2]kbit ceil ${RATE_OUT}kbit prio 2
tc class add dev $IFACE parent 1:1 classid 1:13 htb rate $[$RATE_OUT/9]kbit ceil ${RATE_OUT}kbit prio 3
# $SPORT 22 0xffff - 22 port, 22 0xfffe - 22,23 ports.
# 1:10
tc filter add dev $IFACE parent 1:0 prio 1 $U32 $TCP $SPORT 22 0xffff classid 1:10
tc filter add dev $IFACE parent 1:0 prio 1 $U32 $TCP $DPORT 22 0xffff classid 1:10
# 1:11
tc filter add dev $IFACE parent 1:0 prio 1 $U32 $ICMP classid 1:11
# 1:12
tc filter add dev $IFACE parent 1:0 prio 2 $U32 $TCP $DPORT 80 0xffff classid 1:12
tc filter add dev $IFACE parent 1:0 prio 2 $U32 $TCP $DPORT 443 0xffff classid 1:12
tc filter add dev $IFACE parent 1:0 prio 2 $U32 $TCP $SPORT 25 0xffff classid 1:12
tc filter add dev $IFACE parent 1:0 prio 2 $U32 $TCP $SPORT 80 0xffff classid 1:12
tc filter add dev $IFACE parent 1:0 prio 2 $U32 $TCP $SPORT 443 0xffff classid 1:12
#остальное в 1:13
# алгоритм добавления очереди
tc qdisc add dev $IFACE parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $IFACE parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $IFACE parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev $IFACE parent 1:13 handle 13: sfq perturb 10
eend $?
}
stop() {
ebegin "Shaper Stopping..."
IFACE=eth1
tc qdisc del dev $IFACE root
eend $?
}
субдомены && apache
вот писал: http://www.gentoo.ru/node/11842
не удивлен, но ни кто мне не ответил и не помог. это часто свойственно людям, но помог себе сам :)
через mod_rewrite, эффект получил совершенно не тот :(
но написал скрипт за вечер :)
#!/bin/bash
# Not optimized!!! [FixMe]
# Crash don't detected
APACHE2_STATUS="/etc/init.d/apache2 status";
APACHE2_START="/etc/init.d/apache2 start";
APACHE2_STOP="/etc/init.d/apache2 stop";
$APACHE2_STATUS
if [ $? = 0 ]; then
$APACHE2_STOP >/dev/null 2>&1
fi
VHOST_DIR="/home/www/localhost/vhosts/works";
VHOSTS_BASE="/usr/local/etc/vhost.conf";
HOSTS_CONF_FILE="/etc/hosts"
VHOST_CONF_FILE="/etc/apache2/vhosts.d/works_vhost.include";
VHOST_COUNT=`ls -t $VHOST_DIR|awk -F' ' '{ print $0 | "sort" }'|wc -l`
while [ $VHOST_COUNT -gt 0 ]
do
VHOST=`ls -t $VHOST_DIR|awk -F' ' '{ print $0 | "sort" }'|head -n $VHOST_COUNT|tail -n 1`
let VHOST_COUNT=VHOST_COUNT-1
grep -x $VHOST $VHOSTS_BASE >/dev/null 2>&1
if [ $? = 0 ]; then
echo -en "\033[32;40;5m * \033[0m$VHOST:\033[32;40;22m exist \033[0m\n"
else
echo -en "\033[32;40;5m * \033[0m$VHOST:\033[31;40;22m don't exist \033[0m "
VHOST_CONF="\n<VirtualHost localhost:80>\n\tServerName $VHOST\n\tServerAdmin root@localhost\n\tDocumentRoot \"/home/www/localhost/vhosts/works/$VHOST\"\n\n\t<Directory \"/home/www/localhost/vhosts/works/$VHOST\">\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tOrder allow,deny\n\t\tAllow from all\n\t</Directory>\n\n\t<IfModule mpm_peruser_module>\n\t\tServerEnvironment apache apache\n\t</IfModule>\n</VirtualHost>\n";
echo -en $VHOST_CONF >> $VHOST_CONF_FILE
echo $VHOST >> $VHOSTS_BASE
echo -en "192.168.0.1\t$VHOST\n" >> $HOSTS_CONF_FILE
echo -en "\033[32;40;22m (add) \033[0m\n"
fi
done
$APACHE2_STATUS
if [ $? != 0 ]; then
$APACHE2_START >/dev/null 2>&1
fi
маленький такой скриптик, дает нужную функциональность. есть парочка не доработок :( как видно читаются не только директории, нет функции удаления отутсвующих в реальности но имеющихся в базе хостов, да и все вроде :)
#!/bin/bash
DATE=`/bin/date "+%Y%m%d"`
PORTDIR="/usr/portage/"
FILENAME="portage"
SAVEDIR="/home/ftp/gentoo/portage/"
OPTIONS="Create Erase Check Quit"
echo -e '\E[37;44m'"\033[1mToday : `/bin/date "+%c"`\033[0m"; tput sgr0
select opt in $OPTIONS; do
if [ "$opt" = "Create" ]; then
echo -e '\E[37;44m'"\033[1mCreate tar arch\033[0m" ; tput sgr0
time tar cf $SAVEDIR$FILENAME-$DATE.tar $PORTDIR
echo -e '\E[37;44m'"\033[1mbzip2 file\033[0m" ; tput sgr0
time bzip2 $SAVEDIR$FILENAME-$DATE.tar
md5sum $SAVEDIR$FILENAME-$DATE.tar.bz2 >> $SAVEDIR$FILENAME-$DATE.tar.bz2.md5sum
ls -lh $SAVEDIR$FILENAME-$DATE.tar.bz2 | gawk '{ print $9"\t" $5}'
elif [ "$opt" = "Quit" ]; then
echo -e '\E[37;44m'"\033[1mQuit...\033[0m" ; tput sgr0
exit
elif [ "$opt" = "Erase" ]; then
echo -e '\E[37;44m'"\033[1mPlease enter date for delete:\033[0m" ; tput sgr0
read UDATE
rm -i $SAVEDIR$FILENAME-$UDATE.tar.bz2
rm -i $SAVEDIR$FILENAME-$UDATE.tar.bz2.md5sum
elif [ "$opt" = "Check" ]; then
echo -e '\E[37;44m'"\033[1mPlease enter date for check:\033[0m" ; tput sgr0
read UDATE
cd $SAVEDIR
md5sum -w -c $FILENAME-$UDATE.tar.bz2.md5sum
fi
done
Народ. Тэг "[code]"
Народ. Тэг "[code]" еще никто не отменял. Читать же невозможно =)/
Пишите назанечение скриптов
Народ, + пишите объяснение скриптов
В баше не очень
В баше не очень шарю.
Написал вот такую штуку включать-отключать флэш, а то часто опера виснет когда что-нибудь собирается и пытаешься посмотреть страницу на которой есть флэш.
просто переименовывает файл, может и через жопу, но во всяком случае с оперой срабатывает
А что,
А что, отключение по F12 уже не катит? (-:Е
Пожалуйста, не описывайте своё железо в подписи
FlashBlock плагин (userjs) к
FlashBlock плагин (userjs) к опере этим может занимаеться по-человечески.
Шкрыптец для
Шкрыптец для реализации XEP-0118 (Publish tune) в связке Psi+MPD
Пожалуйста, не описывайте своё железо в подписи
Поддался общей
Поддался общей графомании.
Полуплагиат, не помню уже где спёр идею, только "творчески" переработал :)
#!/bin/sh
# Скрипт для бэкапа моей домашней директории в зашифрованный с помощью EncFS каталог.
# Запускается ежедневно, раз в месяц делается полное резервирование в отдельный каталог.
# Таким образом, создаётся отдельный ежемесячный бэкап с ежедневрым инкрементным обновлением.
# Директории, которые используются программой EncFS, создаются заранее.
# Смотри man encfs.
# Определяем переменные и функции, пути к исполняемым файлам.
# Так как данный скрипт запускается при старте KDE,
# сделана задержка его исполнения, чтобы дать KDE загрузиться.
RUNTIME_DELAY="30"
# Директория, данные из которой нужно сохранить.
BACKUPED_DIR="${HOME}"
# Директории, данные из которых не нуждаются в сохранении.
EXCLUDE_DIR_1="${BACKUPED_DIR}/Desktop/Doc/private/foto"
EXCLUDE_DIR_2="${BACKUPED_DIR}/Desktop/Doc/private/video"
# Директория, в которой в зашифрованном виде хранятся данные.
ENCRYPT_DIR="/home/users/encrypt-backup"
# Директория, в которой находятся (виртуально) расшифрованные данные.
VIRT_ENCRYPT_DIR="/home/users/raw-backup"
# Директория, с ежемесячным бэкапом.
MONTHLY_BACKUP="${VIRT_ENCRYPT_DIR}/`date +%m-%Y`-`whoami`"
#
# Определяем полные пути к программам.
FUSERMOUNT=`which fusermount`
ENCFS=`which encfs`
KDIALOG=`which kdialog`
RDIFF_BACKUP=`which rdiff-backup`
# Опции команды rdiff-backup
# Исключить каталоги
EXCLUDE_OPT="--exclude ${EXCLUDE_DIR_1} --exclude ${EXCLUDE_DIR_2}"
# Включить каталоги
INCLUDE_OPT=""
#
RDIFF_BACKUP_OPT="${EXCLUDE_OPT}"
# Количество попыток подключёния зашифрованного раздела
ECRYPT_CHECK_NUM="3"
# Проверяем, делалось ли резервирование сегодня
CHECK_LOCK="${HOME}/home-rdiff.lock"
### ЗАПУСКАЕМ СКРИПТ ###
# Задержка при запуске
sleep ${RUNTIME_DELAY}
# Если lock-файла нет или он создан на несколько дней раньше, выполнить резервирование.
if [[ ! ( -f ${CHECK_LOCK} ) || $(cat ${CHECK_LOCK} ) -lt `date +%Y%j` ]];
# В предыдущей строке в date +%j дополнительно поставил %Y (год в формате YYYY),
# иначе с наступлением следующего года нумерация в CHECK_LOCK была бы больше текущей даты.
then
# Хотим ли мы делать резервирование.
if $(${KDIALOG} --title "Запланированное резервирование!" --yesno "Продолжить резервирование ${BACKUPED_DIR}?");
then
# Производить проверку, подключён ли зашифрованный раздел.
# Возможно, нужно ограничить количество попыток ввода пароля.
while [ "$(cat /proc/mounts | grep encfs | grep ${VIRT_ENCRYPT_DIR})" = "" ];
do
${KDIALOG} --title "Монтирование ${ENCRYPT_DIR}..." --password "Введите пароль. Количество попыток ${ECRYPT_CHECK_NUM}" | ${ENCFS} -S ${ENCRYPT_DIR} ${VIRT_ENCRYPT_DIR} || \
${KDIALOG} --sorry "Неверный пароль!"
# Счётчик уменьшаем на 1 после каждой попытки
ECRYPT_CHECK_NUM=`expr ${ECRYPT_CHECK_NUM} - 1`
if [ ${ECRYPT_CHECK_NUM} -eq 0 ];
then
# При неудачном вводе пароля выходим со статусом ошибки.
exit 1
fi
done
if [ ! -d ${MONTHLY_BACKUP} -o ! -w ${MONTHLY_BACKUP} ];
then
#${KDIALOG} --msgbox "Создаю папку"
mkdir -p ${MONTHLY_BACKUP}
fi
#${KDIALOG} --msgbox "Резервирование ${BACKUPED_DIR} ..."
if $(${RDIFF_BACKUP} ${RDIFF_BACKUP_OPT} ${BACKUPED_DIR} ${MONTHLY_BACKUP} );
then
if $(${FUSERMOUNT} -u ${VIRT_ENCRYPT_DIR} );
then
${KDIALOG} --msgbox "Резервирование ${BACKUPED_DIR} закончено успешно"
# Создаём временную метку созданного бэкапа.
# В предыдущей строке в date +%j дополнительно
# поставил %Y (год в формате YYYY),
# иначе с наступлением следующего года
# нумерация в CHECK_LOCK была бы больше текущей даты.
echo "`date +%Y%j`" > ${CHECK_LOCK}
else
${KDIALOG} --error "Не могу размонтировать ${VIRT_ENCRYPT_DIR}, устройство занято!"
fi
else
${KDIALOG} --error "Резервирование ${BACKUPED_DIR} закончено с ошибками!"
fi
else
${KDIALOG} --sorry "Резервирование отменено!"
#exit 1
# Возможно использовать код выхода для контроля выполнения резервирования.
fi
fi
P. S. Скрипт следует поместить в ~/.kde3.5/Autostart
Для извлечения в случае необходимости сохранённых бэкапов (man rdiff-backup) написал, точнее "творчески" переработал ещё один скриптик:
#!/bin/sh
# В первом аргументе скрипта передаётся путь к директории с зашифрованными данными.
SRC=$1
# Во втором аргументе - точка монтирования для расшифровки
DST=$2
KDIALOG=`which kdialog`
FUSERMOUNT=`which fusermount`
KONQUEROR=`which konqueror`
ENCFS=`which encfs`
if [ "$(cat /proc/mounts | grep encfs | grep $DST)" != "" ];
then
$(${KDIALOG} --title "encFS: Отмонтирование $DST..." --warningyesno "encFS: Хотите $DST отмонтировать?")
if [ $? == 0 ]
then
${FUSERMOUNT} -u $DST &
else
${KONQUEROR} $DST &
fi
else
$(${KDIALOG} --title "encFS: Монтирование $DST..." --warningyesno "encFS: Хотите монтировать $DST ?")
if [ $? == 0 ]
then
${KDIALOG} --title "encFS: Пароль..." --password "Ввод пароля для [$DST]" | ${ENCFS} -S
fi
fi
В KDE'шном меню создал пункт "Проверка архива", где в строку "Команда" ввёл
/home/lupo/bin/mountsafe.sh /home/users/encrypt-backup /home/users/raw-backup
инкрементальное резервирование, не привязанное ко времени
Выложу свой скриптик для резервирования, + его в том, что может выполняться в любой момент и всегда доступно наперёд заданное число бэкапов.
То есть, решена проблема, когда что-то испортилось, а пользователь ещё не успел заметить, но уже сделана новая полная резервная копия.
Число хранимых полных резервных копий и промежуточных регулируется, выполнение скрипта возможно в любой момент. Дополнительно производится синхронизация общих бэкапов с сервером. Для каждого хоста создаётся своя директория в синхронизируемых папках, пример папок такой:
mirror
host1
дата-время-full
дата-время
дата-время
дата-время
дата-время-full
дата-время
дата-время
дата-время
дата-время-full
дата-время
дата-время
host2
дата-время-full
дата-время
дата-время
дата-время-full
дата-время
дата-время
дата-время-full
дата-время
дата-время
дата-время-full
Устаревшие бэкапы и инкрементальные, для кт. отсутствуют полные рез. копии (по причине устаревания или просто, если юзер удалил) автоматически удаляются.
Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!
Похоже на переизобретение
Похоже на переизобретение app-backup/rsnapshot
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Похоже, не смотрели даже =)
rsnapshot может быть запущен с интервалом в несколько секунд, если Вы работаете в системе и Вам необходимо сохранять все снимки ф.с. каждые 0.017-5 минут?
Скорость выполнения задачи rsnapshot-ом сравнима со скоростью алгоритма однократного обхода дерева файловой системы с прямой подстановкой условий?
Все входные данные для скрипта берутся из директории с бэкапами и являются достаточными для определения того, что уже не требуется и что было удалено по желанию пользователя, в то время как для работы rsnaphot необходимо возиться с файлами конфигурации. Особенно это ощутимо, когда Вам нужно на час-другой настроить авто-бэкап разрабатываемого проекта или Вы просто пришли посидеть за чужим компьютером.
Сравните громоздкость программы rsnapshot на perl и прозрачность bash-скрипта. =)
+ bash-скрипт каждый может модифицировать в соответствии с его требованиями, мне понадобился один вечер, чтобы придумать и реализовать нужный мне алгоритм на bash, которые делает то, что нужно именно мне.
Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!
и Вам необходимо сохранять
освой icron , если уж на то пошло
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): и Вам
Спасибо за совет! А что это, если не секрет?
Как альтернатива, такая команда:
Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!
займусь некрофилией (-:Е (с)Krigstask
скрипт, выполняет, обновление системы, обновление базы esearch, затем проводит emerge -pvuDN world, glsa-check (на наличие уязвимых пакетов), затем фильтрует вывод и отправляет по почте через ssmtp который идет в gentoo как MTA по дефолту. чтобы скрипт оправлял почту нужно настроить ssmtp настройка сводится к простой правке /etc/ssmtp/ssmtp.conf
root=yourmail@domain.com
mailhub=mx.domain.com:25
hostname=mx.domain.com:25
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=yourmail@domain.com
AuthPass=yourpassword
ну и сам скрипт
+ 1
наверняка многие админы шлюзов и проксей сталкивались с клиент-банками, через прокси они работать не хотят, подавай им реальный айпишник... так вот наверняка приходилось их натить, и для каждого такого клиента вписывать в правила соответвующуюю строчку типа, iptables -t nat -A POSTROUTING -s 192.168.0.5 -d 85.24.16.68 -p tcp --dport 8452 -j SNAT --to-source $REAL_IP.
так вот обленившись в очередной раз я решил написать скрипт, который сам прописывает параметры клиентов и адресов с портами банков в правила для iptables. в итоге получилось что нужно вести текстовый файл, в котором посторочно перечислены 'клиент моей сетки' 'адрес банка' 'порт банка'.
В скрипте цикл который читает строку и распихивает эти парметры в строку для iptables. получилось вот что.
проверено, работает. Этот цикл у меня воткнут в набор правил где происходит формирование nat-цепочек
Друзья! Помогите плз! Тема
Друзья! Помогите плз! Тема такая что надо написать скриптик на BASH, который прописывает прокси в систему, т.е что бы при поключении к одной точке доступа было прокси а при подключении к другим не было. Напишете хоть алгоритм действий или не обходимые команды.
Ну, можно сделать это через
Ну, можно сделать это через post_up в /etc/conf.d/net, к примеру.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Я бы monit заюзал.
Я бы monit заюзал.
OpenVPN
Проверка доступен или нет впн сервер, если не доступен то делаем рестарт служб.
Информация записывается в файл лога, всегда можно видеть что и как было.
Скрипт запускаю у себя по кронтабу, каждую минут.
Может кому понадобится...
Почему не сделать через опции
Почему не сделать через опции самого pppd (persist)?
...
небольшая специфика работы.. засчет этого иногда при созданном пппое соединении не пингуется сервер..
это вопросы к провайдеру, но когда пытаешся говорить с ним, толка так и не появляется..
поэтому пришлось вот придумывать..
т.е. когда pppoe соединение падает, то у меня оно само подымается.
Примитивный скрипт для логов,
Примитивный скрипт для логов, делал для себя
Все просто, при включении проверяем существует ли папка, если нет, создаем и делаем симлинк. Плюс в силу особенностей времяпрепровождения за шайтан машиной, еще пара команд, так же весьма понятных...
Все мы, рано или поздно, будем там...
отдельный раздел или блог
думается мне что в одной нити форума постить кучу скриптов и тут же их обсуждать как то плохо выглядит.
надо либо отдельный раздел под это выделять, либо модерируемый блог для всех или еще чего нибудь.
а то совсем каша получается, а вот инфа хорошая ...
на 100% согласен!
Поддерживаю!
Деление по целевому назначению.
Если ничего не было, то как могло что-то появиться? А если все-таки что-то было, то откуда тогда оно взялось? Нашу Вселенную породила Рекурсия!