Еще одна история про домашний сервер, или операция «silence»

от автора

Добрый день, хабраюзеры!

imageНаверняка каждый разработчик, рано или поздно, сталкивается с проблемой тестового окружения. Не очень удобно держать ПК включенным 24х7, да еще и заваливать его софтом для экспериментов под завязку. С другой стороны найти хостинг по собственному вкусу, да еще и не дорогой — тоже задача не из легких. Что же делать? Выход есть — развернуть песочницу дома. Как я убедился, об этом детальнее ниже, это не дорого, это удобно и очень увлекательно.

Disclaimer: пост публикуется по просьбе icepro, поэтому не спешите менять карму мне, а лучше помогите хорошему человеку с инвайтом. Вы не найдете тут откровений или неожиданных решений, но проходя подобный путь сможете найти все необходимое в одном месте.

Заранее предупрежу: статья первая, сильно не бейте.

А теперь к деталям. Заранее прошу бородатых админов и всех компетентных в данной теме людей, не хвататься за сердце, фукать и спешить ставить минусы, ведь я только учусь и администрированием плотно не занимался. Зато надеюсь начинающим смогу сократить путь в Linux на пару шагов и пройти быстрое знакомство действительно быстро 🙂

Краткое содержание

  1. Начинка
  2. OS
  3. Dev Environment
  4. Резервное копирование

Начинка


Итак, идея есть, начнем воплощать. Самым главным критерием для меня при выборе железа были — цена, низкое энергопотребление и отсутствие шума (иначе был риск что жена отправит мою песочницу на балкон, да еще может и со мной вместе:) ). Все это указывало на то, что целевым будет формфактор — MiniITX.

image image

Побродив по интернет магазинам я нашел вот такую материнскую плату: Intel BOXD2500HN.
Базируется она на процессоре Intel Atom D2500 (1.86 ГГц). Для меня этой мощности было предостаточно. Потребляет энергии — 10 Ватт. Цена — около $70. Охлаждение пассивное — шума нету. Так же дома валялась SO-DIMM память на 2 ГБ и полутерабайтный винт.
Теперь о корпусе. Опять таки хотелось меньше шума, и поэтому выбор пал на корпус со внешним БП — DELUX E-2012 Black Mini-ITX
Итого единственный кулер — 40 мм, размещенный над жестким диском (ну было штатное место, вот и решил укомплектовать полностью).

OS


Выбор операционки был не долгим. Ранее приходилось работать с Ubuntu, поэтому выбор пал на ее фундамент — Debian. На момент написания статьи последней версией (которую я и установил) была 7.0 — Wheezy. Скачать ее можно на оффсайте, там она представлена в нескольких вариациях в зависимости от графической оболочки. Голую консоль я ставить не решился, и поэтому среди представленных вариантов выбрал самую легковесную — LXDE.

Сразу оговорюсь — Debian поразила меня богатством софтового репозитория. В нем можно найти все что угодно. Для того что бы поискать по имени интересующую программу воспользуемся командой:

sudo apt-cache search <название программы, или его часть> 

для установки выполняем

sudo apt-get install <название программы> 

Далее по тексту я буду упоминать об установке софта, но вы уже будете знать как это делать.

Ставить Debian не сложно. Скачиваем образ и делаем загрузочную USB флешку (сделать ее поможет LinuxLive USB Creator). Далее загружаемся с нее и включаем графический установщик (так будет проще). В основном установка похожа на установку windows: жмем Далее, Далее, Далее. Но некоторые моменты все же есть:
— на шаге выбора разметки выбираем отдельные разделы
— после того как мастер авторазбивки диска покажет вам предполагаемую структуру — не соглашайтесь, увеличьте RootFS (она же "/") хотя бы до пары гигабайт (у меня сейчас 512 Мб и за разделом приходится очень пристально следить)
— выбор программного обеспечения оставляем как есть (галки на «Окружение рабочего стола» и «Стандартная система», остальное поставим позже)
Если все же нужна пошаговая помощь при установке то рекомендую на просторах интернета найти маунал «Web-сервер на Debian GNU_Linux для начинающих».

Далее было произведено несколько мелких твиков системы:

  1. sudo

    Для того что бы иметь возможность вашему пользователю исполнять команды от имени суперпользователя, его нужно добавить в sudoer list. Детали настройки можно найти в документе который я уже упоминал выше, в разделе «1.2.1 Базовая настройка sudo»

  2. Удаленный доступ

    Дабы иметь возможность удаленного доступа, я сейчас говорю не про ssh, а как раз рабочий стол, был установлен VNC сервер — x11vnc.
    Настройка довольно легкая, сначала генерируем авторизационный файл:

    x11vnc -storepasswd <pass> <file> 

    а потом добавим VNC сервер в автозагрузку (/etc/xdg/lxsession/LXDE/autostart)

    @/usr/bin/x11vnc -dontdisconnect -display :0 -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -rfbauth /home/ice/.vnc/passwd 

  3. Autologin

    Материнская плата умеет восстанавливать свое состояние после того как электричество было прервано и возобновлено. Но если к серверу не подключен монитор и не видно состояния системы, то после перебоев в электросети графическая среда так и будет висеть на странице Login после перезагрузки. Для того что бы устранить это неудобство добавим возможность автовхода для нашего пользователя, для этого в файл /etc/lightdm/lightdm.conf добавим строки:

    autologin-user=ice autologin-user-timeout=0 

  4. Hardware монитор

    Следить за оборудованием поможет

    lshw lshw-gtk 

    Для мониторинга температуры я доставил lm-sensors и hddtemp.
    Команда

    sensors 

    показывает информацию о МП с доступных датчиков.

    Перед использованием утилиты нужно что бы она обнаружила все датчики, для этого требуется запустить:

    /usr/sbin/sensors-detect 

    А команда

    hddtemp /dev/sda 

    подсказывает до какой температуры нагрелся жесткий диск.

    Первое время у меня была мания проверять температуру и другие датчики, поэтому я написал кратенький скрипт для сбора и логирования данных:

    #!/bin/bash echo '################## TIME ##################' date echo '################# UP TIME ################' uptime echo '################# MB TEMP ################' sensors echo '################ HDD TEMP ################' sudo hddtemp /dev/sda echo echo 

    Теперь создадим расписание запуска скрипта, но предварительно выдадим ему права на выполнение:

    visudo ice     ALL=NOPASSWD: /home/ice/scripts/monitoring/temp.sh 

    а теперь Cron:

    sudo crontab -e -u ice */10 * * * * sudo /home/ice/scripts/monitoring/temp.sh >> /home/ice/scripts/monitoring/temp.log 2>&1 

    Проверить что запуски происходят можно командой:

    grep CRON /var/log/syslog 

    И еще одно — что бы логи не накапливались я настроил их ротацию. Что бы это сделать установим Logrotate

    sudo apt-get install logrotate 

    А далее создадим в папке /etc/logrotate.d/ файл конфигурации. Мой выглядит так:

    /home/ice/scripts/monitoring/temp.log { # путь к логам   daily # ротировать ежедневно   missingok # отсутствие файла не является ошибкой   rotate 30 # сохраняется последние 30 ротированных файлов   compress # сжимать ротируемый файл   delaycompress # сжимать предыдущий файл при следующей ротации (т.е. файл *.log.1 будет не сжат, а *.log.2 и далее сжатыми)   notifempty # не обрабатывать пустые файлы   create 640 ice ice # сразу после ротации создать пустой файл с заданными правами и пользователем } 

  5. Другие мелочи

    • htop — продвинутый монитор процессов
    • пакет для измерения производительности системы, детали тут sysstat, а настройка тут — Permanent link to How to configure sysstat/sar on Ubuntu/Debian
    • lynis — утилита, помогающая побороть желание «нужно больше контроля и мониторинга над системой», описание — lynis
    • rtorrent — консольный торрент-клиент (я кстати еще и web-морду к нему пристроил, очень удобно), детали настройки можно найти тут — Установка rtorent+rutorrent на Debian/Ubuntu
    • exim4 — почтовый сервер, конфигурация с использованием GMail SMTP описана тут — Configuring exim4 in Ubuntu to use GMail for SMTP
    • proftpd — FTP сервер (настройку подсмотрел тут Настройка домашнего сервера на базе Debian)
    • samba — сетевая файловая система (попробовать хотелось всего, вот и поставил), настройку можно найти тут — Установка и настройка Samba в Debian GNU/Linux и Ubuntu Linux
      Для доступа samba использует системных пользователей, добавить их в базу данных SMB можно командой
      smbpasswd -a ice 

    • mc — полезный файловый менеджер
    • ssh — тут без комментариев
    • в опции монтирования (/etc/fstab) добавил commit=60 для борьбы с излишним журналированием которое постоянно мучило жесткий диск (процесс jbd2)

Dev Environment


Итак, теперь самое интересное, что же мне удалось впихать в эту маленькую коробочку.

LAMP | nginx | Node.js | MongoDB | GIT | Java | Python | Ruby | .NET | Jenkins

LAMP

Да, я активный web-разработчик и без этой платформы как без рук. Ставится все элементарно:

sudo apt-get update sudo apt-get upgrade sudo apt-get install apache2 apache2-doc php5 libapache2-mod-php5 php-pear sudo apt-get install mysql-server mysql-client php5-mysql sudo apt-get install php5-curl php5-gd php5-imagick php5-ldap php5-imap php5-memcache php5-common php5-mysql php5-ps php5-tidy imagemagick php5-xcache php5-xdebug php5-xmlrpc php5-xsl 

Но сразу после установки меня постигла неудача — php файлы никак не хотели обрабатываться apache’м. Для того что бы это исправить я произвел следующие манипуляции:

/etc/apache2$ sudo gedit apache2.con # перед секцией инклудов добавил AddHandler application/x-httpd-php .php .php4 .php3 .html AddType application/x-httpd-php .html 

Для удобного дебага php я поставил и настроил xdebug. Установка детально описана по следующим ссылкам:
Configuring Xdebug for PHP development/Linux
Remote Xdebug на PhpStorm

При создании виртуальных хостов не забываем прописывать их в hosts

nginx

Для повышение производительности апача рекомендуют использовать его в связке с nginx со следующим распределением ролей: apache — backend, nginx — frontend. О том как выполнить такую конфигурацию повествует статья — Установка и настройка Nginx. Nginx frontend + Apache backend.

Node.js

Прекрасная платформа, особенно для создания небольших клиент-серверных приложений. Одни только web-sockets чего стоят. Ну да ладно, вернемся к установке. Ставить node.js немного не тривиально, но не сложно — true’шным образом, то есть из исходников:

sudo apt-get install python g++ make checkinstall mkdir ~/src && cd $_ wget -N http://nodejs.org/dist/node-latest.tar.gz tar xzvf node-latest.tar.gz && cd node-v* # убираем "v" из номера версии в окне диалога ./configure checkinstall  sudo dpkg -i node_* 

Чуть более подробно установка расписана тут — Installing Node.js

MongoDB

А почему бы еще и не приобщиться к NoSQL сообществу? Вот и я задался этим вопросом. Ну может плотно NoSQL использовать я и не планировал, но пощупать — почему нет?
Устанавливаем!

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list sudo apt-get update sudo apt-get install mongodb-10gen 

… и запускаем

sudo /etc/init.d/mongodb start 

GIT

Давно уже хотелось съехать с публичных репозиториев на github. И вот пришло время. Git поставить не сложно, он в репозитории пакетов так и зовется — git, но сконфигурировать его для удобной работы немного сложнее, нам нужно:
— создать отдельного пользователя — git
— установить giolite для администрирования репозиториев

Вот это видео помогло побороть ситуацию когда мои ключи сгенерированные в putty игнорировались — How To Fix «Server Refused Our Key» Error That Caused By RSA Public Key Generated By Puttygen

Далее клонируем giolite репозиторий — ssh://git@192.168.1.110:/gitolite-admin.git и вуаля, управляем репами.

Настроить git+gitolite помогли следующие ссылки:
Настройка сервера. Gitolite — хостинг git-репозиториев
Собственный git-сервер с нуля

Для удобного обзора репозиториев из браузера существует — gitweb. Как его установить описано здесь — Setting up Gitweb on Debian.
От себя добавлю:

usermod -a -G gitolite www-data 

для того что бы apach и gitolite подружились.

А вот настройка виртуального хоста (по крупицам собирал из разных источников пока не заработало)

<VirtualHost *:81>         ServerAdmin webmaster@localhost         ServerName git-web.loc         SetEnv  GITWEB_CONFIG   /etc/gitweb.conf         DocumentRoot /home/git/repositories         Alias /static/gitweb.css /usr/share/gitweb/static/gitweb.css         Alias /static/git-logo.png /usr/share/gitweb/static/git-logo.png         Alias /static/git-favicon.png /usr/share/gitweb/static/git-favicon.png         Alias /static/gitweb.js /usr/share/gitweb/static/gitweb.js         Alias /git /home/git/repositories         ScriptAlias /gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi         DirectoryIndex gitweb.cgi          <Directory /home/git/repositories/>                 Allow from All                 Options +ExecCGI                 AllowOverride All                 AuthType Basic                 AuthName "Private Repository"                 AuthUserFile /home/ice/stuff/keys/.htpasswd-gitweb                 Require valid-user                 AddHandler cgi-script .cgi                 DirectoryIndex gitweb.cgi                 RewriteEngine On                 RewriteCond %{REQUEST_FILENAME}         !-f                 RewriteRule ^.* /gitweb.cgi/$0          [L,PT]         </Directory>          SetEnv GIT_PROJECT_ROOT /home/git/repositories         SetEnv GIT_HTTP_EXPORT_ALL         ErrorLog ${APACHE_LOG_DIR}/git_web_error.log         LogLevel warn         CustomLog ${APACHE_LOG_DIR}/git_web_access.log combined </VirtualHost> 

Basic авторизация по вкусу, можно отключить.

Java

Перейдем к java платформе. Первым делом удалим openjdk и поставим Java 7

sudo apt-get remove openjdk*   su - # добавим репозитории java echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" | tee -a /etc/apt/sources.list apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886  apt-get update # принимаем лицензию Oracle software license echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections # ставим Oracle JDK7 apt-get install oracle-java7-installer # выходим из под root exit  # убедимся что java поставилась java -version 

Сверху я прибавил следующее ПО:
— scala (как раз изучаю, почему бы не потренироваться на своем сервере)
— glassfish — один из самых активно разрабатываемых (если не самый) серверов приложений
* если glassfish не запускается из-за того что занят порт 8080 (как это получилось у меня), то давайте сменим дефолтный порт. Для этого в GlassFish_Server\glassfish\domains\domain1\config находим наш порт и ставим другой:
<network-listener name="http-listener-1" port="8081" protocol="http-listener-1" thread-pool="http-thread-pool" transport="tcp"</network-listener>

Python

Следующим пожаловал питон вместе с django. Ставятся из репозитория довольно легко. Вот тут можно посмотреть на простоту использования — Writing your first Django app

Ruby

Как и питон, руби я поставил тоже со своим фреймворком — Rails. Ставить чуть сложнее, поэтому приводу инструкцию:

apt-get install build-essential libapache2-mod-passenger ruby rdoc ruby-dev libopenssl-ruby rubygems  gem install fastthread gem install rails --version 3.0.4 

А так же не забудьте добавить rails в $PATH:
PATH=".../var/lib/gems/VERSION/bin"
Ну а использовать все так же легко — Getting Started with Rails

Для внутренних нужд так же было решено развернуть баг-трекер, и им стал —Redmine.
Ставить вот так:

# доставляем нужные библиотеки aptitude install libmagickcode-dev aptitude install libmagickwand-dev aptitude install ruby1.9.1-dev aptitude install libmysqlclient-dev  # скачиваем и распаковываем redmine cd /opt wget http://files.rubyforge.vm.bytemark.co.uk/redmine/redmine-2.3.1.tar.gz tar -zxvf redmine-2.3.1.tar.gz cd /var/www ln -s /redmine-2.3.1/public redmine chown -R www-data:www-data /opt/redmine-2.3.1 

Заходим в mysql клиент и создаем базу и пользователя:

CREATE DATABASE redmine_default CHARACTER SET utf8; CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my-password'; GRANT ALL PRIVILEGES ON redmine_default.* TO 'redmine'@'localhost'; 

Создаем конфигурацию базы

cd /redmine-2.3.1/config cp database.yml.example database.yml vi database.yml 

и заполняем ее

production: 	adapter: mysql2 	database: redmine_default 	host: localhost 	username: redmine 	password: my-password 	encoding: utf8 

Создаем файл настроек:

cd /redmine-2.3.1/config cp configuration.yml.example configuration.yml vi configuration.yml 

и настраиваемся (благо в конфиге полно комментариев).
Теперь ставим ruby bundle

gem install bundler bundle install --without development test postgresql sqlite rake generate_secret_token bundle install 

и готовим базу данных:

RAILS_ENV=production rake db:migrate RAILS_ENV=production rake redmine:load_default_data 

После всего этого нужно настроить виртуальных хост в апаче и можно пользоваться.

Настройка (получение информации о комитах из репозитория) описана тут — Redmine Settings. С выбрал вариант в котором с помощью Cron настраивается автоматический опрос репозиториев.

.NET

Не забываем про .NET платформу. Основные компоненты это собственно mono платформа и XSP (ASP.NET сервер) ставятся вот так:

sudo apt-get install mono-common mono-xsp4 

Все, теперь почти все прелести .NET нам доступны.
Деталей можно почерпнуть тут: Mono for Debian .

Jenkins

А венчает все это — CI сервер. Давайте рассмотрим как его поставить и настроить например для… PHP:
Ставим Jenkins

sudo apt-get update sudo apt-get install php5-cli php5-xdebug php-pear ant git php -r 'echo "Xdebug loaded? "; echo (extension_loaded("xdebug")) ? "yes" : "no"; echo chr(10);' wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - sudo bash -c "echo 'deb http://pkg.jenkins-ci.org/debian binary/' > /etc/apt/sources.list.d/jenkins.list" sudo apt-get update sudo apt-get install jenkins 

Добавляем плагины

wget http://localhost:8080/jnlpJars/jenkins-cli.jar java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin checkstyle java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin cloverphp java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin dry java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin htmlpublisher java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin jdepend java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin plot java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin pmd java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin violations java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin xunit java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin git java -jar jenkins-cli.jar -s http://localhost:8080 safe-restart 

Устанавливаем PHPUnit и дополнительные инструменты

sudo pear upgrade PEAR sudo pear channel-discover pear.pdepend.org sudo pear channel-discover pear.phpmd.org sudo pear channel-discover pear.phpunit.de sudo pear channel-discover components.ez.no sudo pear channel-discover pear.symfony-project.com sudo pear install pdepend/PHP_Depend sudo pear install phpmd/PHP_PMD sudo pear install phpunit/phpcpd sudo pear install phpunit/phploc sudo pear install PHPDocumentor sudo pear install PHP_CodeSniffer sudo pear install --alldeps phpunit/PHP_CodeBrowser sudo pear install --alldeps phpunit/PHPUnit 

Конфигурируем:
— скачиваем /build.xml из http://jenkins-php.org/ и редактируем под свой проект
— качаем PMD правила http://phpmd.org/ и кладем как /build/phpmd.xml в проект
— опционально можно добавить ее правил http://pear.php.net/ и ложим как /build/phpcs.xml в проект
— конфигурируем PHPUnit в /tests/phpunit.xml
— скачиваем шаблон задания

cd /var/lib/jenkins/jobs/ sudo git clone git://github.com/sebastianbergmann/php-jenkins-template.git php-template sudo chown -R jenkins:nogroup php-template/ sudo /etc/init.d/jenkins stop sudo /etc/init.d/jenkins start 

— создаем новое задание из шаблона, привязываем к репозиторию (возможно придется добавить плагин под свою систему контроля версий) и радуемся.

Резервное копирование


Понятное дело что избежать поломок оборудования нельзя, но совсем другие ощущения возникают при этой мысли когда у тебя есть резервная копия данных (да еще и свежая).

Сам процесс разделен на 2 вида:
— полное (делаю выборочно, когда чувствую что в системе прошло много изменений и нужно бы сохраниться)
— частичное (все узлы системы которые подвержены ежедневным изменениям: базы, исходники и т.д.)

Сбор полного дампа произвожу с помощью remastersys скриптом.

Посмотреть скрипт

#!/bin/bash  # замеряем сколько идет резервирование start=`date +%s`  echo '[FULL BACK UP Start]' DATE_NOW=`date +%F`  echo '[FULL BACK UP Dump Creation]' # запускаем резервирование sudo remastersys backup install-$DATE_NOW.iso  echo '[FULL BACK UP Dump Saving]' # перемещаем в основную папку хранения sudo cp /home/remastersys/remastersys/install-$DATE_NOW.iso /home/backups/system-iso/install-$DATE_NOW.iso sudo cp /home/remastersys/remastersys/install-$DATE_NOW.iso.md5 /home/backups/system-iso/install-$DATE_NOW.iso.md5  echo '[FULL BACK UP Clean up]' # чистим tmp sudo remastersys clean echo '[FULL BACK UP End]'  end=`date +%s`  runtime=$((end-start)) echo 'Backup time =' $runtime 'sec(s)' 

Частичное выполняется скрпитом в cron еженощно.

Посмотреть скрипт

#!/bin/bash  start=`date +%s`  echo '[BACK UP Start]' DATE_PREF=`date +%F`  echo '[BACK UP Config]' # настраиваем пути к папкам BACKUP_MYSQL_DIR=/home/backups/mysql/$DATE_PREF BACKUP_WWW_DIR=/home/backups/www/$DATE_PREF BACKUP_GIT_DIR=/home/backups/git/$DATE_PREF  echo '[BACK UP Clean up]' # чистим все что лежит дольше недели find /home/backups/mysql/ -mtime +7 -print -mindepth 1 -delete >/dev/null 2>&1 find /home/backups/www/ -mtime +7 -print -mindepth 1 -delete >/dev/null 2>&1 find /home/backups/git/ -mtime +7 -print -mindepth 1 -delete >/dev/null 2>&1 echo '[BACK UP Not Clened Items]' ls /home/backups/mysql/ ls /home/backups/www/ ls /home/backups/git/  echo '[BACK UP Back Up Hosts]' # резервируем хосты tar cpzf $BACKUP_WWW_DIR\-www.tgz /home/www/ >/dev/null 2>&1  echo '[BACK UP Back Up Repositories]' # резервируем репозитории tar cpzf $BACKUP_GIT_DIR\-git.tgz /home/git/ >/dev/null 2>&1  echo '[BACK UP Back Up MySQL]' # резервируем базы данных mysqldump -q -u root -p<password> -h localhost tt_rss | gzip -c > $BACKUP_MYSQL_DIR\-tt_rss.sql.gz mysqldump -q -u root -p<password> -h localhost test | gzip -c > $BACKUP_MYSQL_DIR\-test.sql.gz mysqldump -q -u root -p<password> -h localhost redmine | gzip -c > $BACKUP_MYSQL_DIR\-redmine.sql.gz mysqldump -q -u root -p<password> -h localhost phpmyadmin | gzip -c > $BACKUP_MYSQL_DIR\-phpmyadmin.sql.gz mysqldump -q -u root -p<password> --skip-lock-tables -h localhost performance_schema | gzip -c > $BACKUP_MYSQL_DIR\-performance_schema.sql.gz mysqldump -q -u root -p<password> --skip-lock-tables -h localhost information_schema | gzip -c > $BACKUP_MYSQL_DIR\-information_schema.sql.gz mysqldump -q -u root -p<password> --events -h localhost mysql | gzip -c > $BACKUP_MYSQL_DIR\-mysql.sql.gz  echo '[BACK UP New Items]' ls /home/backups/mysql/ | grep $DATE_PREF ls /home/backups/www/ | grep $DATE_PREF ls /home/backups/git/ | grep $DATE_PREF  echo '[BACK UP End]'  end=`date +%s`  runtime=$((end-start)) echo 'Backup time =' $runtime 'sec(s)' echo '=========================================================' 

Как видно — храню последние 7 копий.

Спасибо! Надеюсь было интересно!

P.S. В случае возникновения вопросов — буду рад помочь.
P.P.S. Дайте, инвайт, пожалуйста.

ссылка на оригинал статьи http://habrahabr.ru/post/205120/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *