Shell - статьи, инструкции...
|
Автор Охальников Олег
|
|
09:02:2011 г. |
|
Как и было обещано в предыдущей статье "VmWare-Server управление машинами из консоли с помощью vmrun", в данной выкладываю скрипт, выполняющий бэкап виртуальной машины (в данном примере машины - Test). Небольшое отступление, т.к. некоторые длинные строки не помещаются в формате сайта, для них сделаны переносы с помощью символа "==>". При копировании скрипта, символы переноса надо убрать, а команду записать в одну строку. Скрипт хорошо комментирован, поэтому требует минимум пояснений. Основные параметры задаются в самом начале скрипта. Задаем логин пароль для администратора виртуальных машин, администратора гостевой ОС, в качестве которой выступает ОС W2k3. Сам скрипт размещаем в директории /root/script/vmbackup (необходимые директории нужно создать). У меня скрипт называется vmbackuptest.sh, делаем скрипт исполняемым, права только владельцу root, остальным запрещаем все - это важно, т.е. chmod 700. Скрипт ведет подробный лог своих действий (содержание лога ниже), путь для файлов логов /root/script/vmbackup/log, в директории будут создаваться файлы следующего вида: 2011-02-09.log (в скрипте этого нет, но легко добавить команду, которая хранит нужное количество логов или сжимает старые логи), которые отправляются администратору на e-mail. В данном примере папка для виртуальных машин - стандартная: /var/lib/vmware/Virtual Machines/, а сама машина находится здесь: /var/lib/vmware/Virtual Machines/Test. Под избыточные бэкапы в системе выделен отдельный HDD, директория с бэкапами расположена по этому пути: /mnt/backup/vmbackup (нужно создать).В данной папке автоматом создается папка формата 2011-02-09, в которую копируются виртуальные машины, в данном примере будет создано следующее: /mnt/backup/vmbackup/2011-02-09/Test/. Итак, сам скрипт в первом приближении, будем считать альфа-альфа (хорошо написанный код не гарантирую, но скрипт выполняет нужные действия, любые предложения по улучшению, принимаются): Коментарии (25) | Просмотров: 3045 |
|
Подробнее...
|
|
|
Автор Охальников Олег
|
|
29:12:2010 г. |
|
Постановка задачи следующая. Есть команда, возвращающая какой-то статус, если говорить о gmirror, то эта команда:
gmirror status Выводит следующее:
Name Status Component
mirror/gm0 COMPLETE ad4
ad6
Будем сравнивать MD5 хэши нормального состояния и измененного, для этого выводим MD5 с нормальным статусом COMPLETE:
# gmirror status | md5
52a948bc6d41efe4b7e68dfcba048a7e Почему MD5, а не ищем например по тексту "COMPLETE"? Можно и так и так, только с MD5 более универсально как мне кажется, можно применить в разных задачах.
Ну а теперь собственно сам скрипт:
# -----------------------------------
# Created Ohalnikov Oleg
# Support: http://unixa.ru
# -----------------------------------
#!/bin/sh
d=`date '+%Y%m%d'`
h="Hostname"
g=$(gmirror status)
m="
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
"
x="52a948bc6d41efe4b7e68dfcba048a7e"
y=$(gmirror status | md5)
if [ $x != $y ]
then
echo "$g" | mail -s "Mirror change status $h $d" $m
fi
exit 0 Вначале определяем переменные:
d - дата в формате ГОДМЕСЯЦДЕНЬ (будем писать в тему письма)
h - Имя хоста, который мониторим (будем писать в тему письма)
g - тескт со статусом рейда (будем писать в тело письма)
m - адрес администратора
x - значение MD5 при нормальном статусе
y - определяем текущее значения MD5, далее сравниваем значение правильное и текущее и если они разные - отправляем письмо.
Скрипт помещаем в crontab (в примере выполняется каждый день в 17:00)
0 17 * * * /root/script/gmstatus.sh
p.s. для RAID ar можно написать по аналогии, команда вывода статуса:
# atacontrol status ar0 Ваш коментарий будет первым | Просмотров: 1335 |
|
Подробнее...
|
|
|
Автор Охальников Олег
|
|
28:12:2010 г. |
Приведу не сложный пример решения следующей задачи...
Необходимо чтобы запросы с внешнего IP с 18:00 до 9:00 редиректились в сеть на локальный IP, а с 9:00 до 18:00 это правило отключалось. Так же необходимо, чтобы в выходные дни правило редиректа работало круглосуточно. Получается как бы динамический NAT )))))).
Все это можно сделать с помощью crontab и очень простых скриптов.
Итак, в качестве NAT у меня используется IPNAT, необходимое правило выглядит следующим образом:
rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp em1 - это внешний интерфейс. Т.е. согласно правилу все коннекты на Inet_IP порт 80 переадресовываются в локалку на Local_IP порт 3107, на котором крутится нужный сервис. Создаем два скрипта однострочника, на добавление правила (ipnat_in.sh) и на удаление правила (ipnat_out.sh). /etc/ipnat.conf - конфиг с правилами IPNAT.
ipnat_in.sh:
#!/bin/sh
echo 'rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp' >> /etc/ipnat.conf; ipnat_out.sh:
#!/bin/sh
cat /etc/ipnat.conf | grep -v Local_IP > /etc/ipnat.conf; Тестируем в ручном режиме, проверяем /etc/ipnat.conf, первый скрипт должен добавлять в конец файла нужное правило, второй - это правило удаляет. Для того чтобы перечитать правило, нужно выполнить следующую команду:
ipnat -FC && ipnat -f /etc/ipnat.conf Ваш коментарий будет первым | Просмотров: 1054 |
|
Подробнее...
|
|
|
Автор Охальников Олег
|
|
24:12:2010 г. |
Резервирование поделю на два вида - это повышение надежности с помощью RAID массивов и избыточное резервирование. Отмечу, что оба подхода должны применяться на ВАЖНЫХ серверах (в лучшем случае - на любых серверах). RAID, например 1 - зеркало, спасет от отказа одного из HDD, если файл сервер с большим количество HDD, то желательнее применять или RAID 10 или RAID 6 (за подробностями в википедию). Т.е. за короткий срок извлекаем поврежденный HDD, вставляем новый синхронизируем и продолжаем работать, наличие HotSwap корзин в данном случае очень желательно. От чего не спасет RAID, так это от человеческого фактора. Например взяли и удалили файл, спохватились, а его уже нет или повредили данные и т.д. Для этого необходима система избыточного резервирования важной информации, на сервере в основном это конфигурационные файлы, базы данных MySQL. В итоге имеем, как минимум 3 HDD, из двух собираем RAID1 (зеркало) и ОТДЕЛЬНЫЙ HDD - под бэкапы важных файлов. Конечно, это не обязательно, это лишь моя точка зрения, моё мнение.
Сам скрипт бэкапа backup.sh не сложный, выглядит следующим образом:
# -----------------------------------
# Created Ohalnikov Oleg
# Support: http://unixa.ru
# -----------------------------------
#!/bin/sh
DIR=/mnt/backup
DATA=`date '+%Y%m%d'`
cd $DIR
mysqldump -u root --password='*****' -l --all-databases | gzip > databases-$DATA.sql.gz
tar -czf named-$DATA.tar.gz /var/named
tar -czf log-$DATA.tar.gz /var/log
tar -czf etc-$DATA.tar.gz /etc
tar -czf locetc-$DATA.tar.gz /usr/local/etc
tar -czf www-$DATA.tar.gz /usr/local/www
for file in *-$DATA.*
do
echo "$file" >> $DIR/current
done
echo "Backup Server $DATA" | mail -s "Backup Server $DATA"
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
< $DIR/current
rm -f $DIR/current
find $DIR/* -mtime +7 -exec rm {} \;
# <<< THE-END >>>
Коментарии (4) | Просмотров: 6032 |
|
Подробнее...
|
|
|
Автор H@wk!
|
|
13:04:2009 г. |
Самый быстрый способ записать iso образ на новый диск - это воспользоваться консольной утилитой cdrecord.
Определяем устройство:
sudo cdrecord -scanbus
Вывод команды - это список всех устройств системы. SCSI адрес каждого устройства представляет три числа, например 1,4,0. Для записи образа выполним следующую команду:
cdrecord dev=1,4,0 -v /dir/image.iso
Для автоматизации последующих записей (дабы не вводить постоянно данные о приводе) пропишем параметры устройства в файле: /etc/default/cdrecord:
Ваш коментарий будет первым | Просмотров: 1029 |
|
Подробнее...
|
|
| |
|
Сейчас на сайте находятся: 19 гостей
Нашли ошибку!
Выделите текст и нажмите:
[Shift]+[Enter]
[Отправить]
Спасибо! |
|