Покоряй и Властвуй: Автоматизация действий Сравнение версий

Различия

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

Ссылка на это сравнение

Следующая версия
Предыдущая версия
fullcircle:24:автоматизация_действий [2010/05/02 15:19]
создано
fullcircle:24:автоматизация_действий [2012/05/28 09:10] (текущий)
Строка 1: Строка 1:
-Приветствуем вас в очередном выпуске FCM, который немного непохож на другие.+======Покоряй и Властвуй: Автоматизация действий ====== 
 +<style right> 
 +//Автор: Лукас Вестерман (Lucas Westermann)//​ 
 +</​style>​
  
-Должно быть, вы заметили, что ​в этом ​месяце журнал ​немного ​изменился. Почти два года мы использовали одни и те же цвета и дизайн, ​но теперь пришла пора перемен. Поэтому отныне мы переходим на бордовый и персиковый. Я не сомневаюсь, что многих сбила ​с толку новая обложка. Длинного и узкого изображения больше ​нет. Вместо него всю страницу заполнила фотография, количество текста уменьшилось, и логотип немного изменился. Нов целом, дизайн остался привычным. А вот на странице содержания я изменил многое. Как мне ​кажется, новое оформление ​более информативно. Я очень надеюсь, что ​новый дизайн вам ​понравится. Если это так, не забудьте упомянуть о нём на Slashdot. Мы хотим попасть на первую ​страницу этого сайта, ​чтобы ​исполнить заветную мечту Роберта.+В этой статье мы рассмотрим автоматизацию ежедневных рутинных действий и создадим рабочее решение для резервного копирования. Во-первых, «сценарий bash» — это ​сценарий,​ состоящий из обычных ​команд bash и некоторых операторов, которые нечасто используются в командной строке (условия if-then-else,​ циклы while и т.д.), а cron — это демон (фоновая служба), ​который выполняет команды, перечисленные в пользовательском файле crontab (поэтому если вам нужно ​запустить задачу, ​требующую прав суперпользователя, то редактировать следует файл crontabпринадлежащий пользователю root). Мы будем использовать простой сценарий (всего ​в одну строчку), который объединяет в один текстовый файл все файлы .java из одного каталога. Вы можете изменить сценарий, например, для объединения ​файлов журналов. Я объясню, как он работает, а затем расскажу, как настроить cron, чтобы сценарий запускался каждые 6 часов. 
 +Я предпочитаю создавать сценарии в редакторе nano, но если вам удобнее пользоваться текстовым ​редактором с графическим интерфейсом, просто замените «nano» ​на «gedit» (без кавычек). Введите команду:
  
-Почему эти изменения увидели свет сейчас?​ Потому что у нас день рожденья! В этом месяце журналу официально исполняется два года! Трудно поверить! В честь этого события количество материалов было увеличено почти в два раза! Знаю, что многим было бы приятно видеть журнал таким объёмным каждый месяц. Но без ваших статей он снова станет обычным в следующем месяце. Могу представить ваше недовольство,​ но журнал зависит от вашего вклада. Пожалуйста,​ не пожалейте времени,​ чтобы написать статью на любимую тему. Её просто нужно набрать в OpenOffice.org,​ приложить к письму вместе с парой иллюстраций и отправить мне. Мой адрес написан чуть ниже.+<​code>​ 
 +nano FileCondenser 
 +</​code>​
  
-Приятного вам чтения. ​Я с нетерпением жду ваших мнений об этих изменениях.+В терминале откроется редактор nano с совершенно пустым файлом. Введите следующие строки (скоро я их поясню):​ 
 + 
 +<​code>​ 
 +#!/bin/bash find $HOME/​workspace/​Year\ 11 -name '​*.java' ​ | while read line; do cat "​${line}";​ done 
 +</​code>​ 
 + 
 +Чтобы сохранить файл, нажмите <​key>​Ctrl+X</​key>​ и <​key>​Enter</​key>​. Чтобы сделать его исполняемым, ​выполните следующую команду: 
 + 
 +<​code>​ 
 +chmod +x FileCondenser 
 +</​code>​ 
 + 
 +Теперь сценарий ​можно запустить (строчка #!/bin/bash в начале сценария указывает на программу,​ которую Ubuntu должна вызвать для ​его обработки),​ выполнив в терминале:​ 
 + 
 +<​code>​ 
 +./​FileCondenser 
 +</​code>​ 
 + 
 +или создав символьную ссылку в /usr/bin (тогда сценарий можно будет запускать,​ как любую другую программу):​ 
 + 
 +<​code>​ 
 +sudo ln -s /<​путь к сценарию>/​FileCondenser /​usr/​bin/​FileCondenser 
 +</​code>​ 
 + 
 +Замените <​путь к сценарию>​ на полный (как того требуют символьные ссылки) путь к свежесозданному сценарию. 
 + 
 +Основа сценария — команда find, которая находит в каталоге eclipse все файлы, оканчивающиеся на .java. Затем вывод команды find передаётся циклу while, который в свою очередь построчно считывает найденные файлы и последовательно выводит строки, до тех ​пор, пока они не закончатся. 
 + 
 +Как я уже говорил, можно изменить путь в сценарии,​ например, на /​var/​log/:​ 
 + 
 + 
 +<​code>​ 
 +find /var/logs/ -name “*.log”|while read line; do cat “${line}”;​ done 
 +</​code>​ 
 + 
 +Этот вариант сценария сольёт воедино все файлы .log из каталога /var/log/ (и подкаталогов) и отобразит результат в терминале. Или ​же можно перенаправить вывод в файл. 
 + 
 +Чтобы теперь добавить сценарий в файл crontab, я предложил бы создать символьную ссылку,​ чтобы команда была короче. Но это не обязательно. Запустите редактор файла crontab: 
 + 
 +<​code>​ 
 +crontab -e 
 +</​code>​ 
 + 
 +Откроется файл crontab текущего пользователя. Если вы хотите редактировать crontab пользователя root (для сценариев резервного копирования и т.д.), запустите:​ 
 + 
 +  
 +<​code>​ 
 +sudo crontab -e root 
 +</​code>​ 
 + 
 +Важно помнить,​ что crontab использует определённый формат записей:​ <​минута>​ <​час>​ <​день>​ <​месяц>​ <​день недели>​ <​команда>​. Каждой позиции должно соответствовать какое-то выражение,​ в роли которого может выступать числовое значение,​ символ подстановки или их комбинация. Например:​ 
 + 
 +Каждые 5 минут:​ 
 +<​code>​*/​5 * * * * FileCondenser > $HOME/​condenseFile.txt</​code>​ 
 + 
 +Каждое воскресенье в 6 вечера:​ 
 +<​code>​00 18 * * sun FileCondenser > $HOME/​condenseFile.txt</​code>​ 
 + 
 +Для периодического резервирования журналов я бы предложил такую запись:​ 
 + 
 +<​code>​* */2 * * * FileCondenser > $HOME/​condenseFile.txt</​code>​ 
 + 
 +Таким образом,​ сценарий будет запускаться раз в два часа, а результат будет храниться в вашей домашней папке в файле condenseFile.txt. Наконец,​ приведу пример простого сценария для резервного копирования. Этот сценарий архивирует определённый каталог или несколько каталогов (например, вашу домашнюю папку или каталог root) на резервный раздел или на внешний ​жёсткий диск: 
 + 
 +<​code>​tar cvvzf /​media/​Backup/​Music\ Backup/​backup.tar.gz $HOME/​Music</​code>​ 
 + 
 +Предполагается,​ что ваш жёсткий диск или резервный раздел смонтирован в /​media/​Backup и на нём есть каталог «Music Backup». Команда tar запаковывает ваш каталог Music в tar-архив backup.tar.gz,​ сжатый при помощи gzip, и помещает его в каталог /​media/​Backups/​Music Backup/. Можно запускать эту команду из crontab и без сценария,​ но если вы собираетесь делать резервирование всей системы (или, допустим,​ раздела root), то вы наверняка захотите указать длинный список каталогов,​ которые не нужно обрабатывать (возможно, ​этот список будет ​храниться в отдельном файле). Так что с использованием сценария это будет просто аккуратнее. Более того, сценарий можно запросто запустить из терминала. Я рекомендую всегда тестировать команды или сценарии на небольшом тестовом каталоге,​ прежде чем добавлять их в crontab, иначе можно столкнуться с проблемами. 
 + 
 +<note tip>​Lucas научился всему, что знает, ломая систему,​ которую потом приходится учиться восстанавливать. Когда есть время, он также ведёт блог http://​lswest-ubuntu.blogspot.com </​note>​ 
 + 
 +-------------------------------- 
 + 
 +http://​lswest.pastebin.com/​f21a592a4 — Для тех, кто заинтересовался,​ версия сценария на языке Python 
 + 
 +http://​www.linux.org/​docs/​ldp/​howto/​Bash-Prog-Intro-HOWTO.html — Учебник по созданию сценариев bash  
 + 
 +http://​www.clickmojo.com/​code/​cron-tutorial.html — Руководство по cron 
 + 
 +--------------------------------------- 
 + 
 +<style center>​ 
 +//​[[..:​24|К содержанию номера]]//​ 
 + 
 +//​[[:​fullcircle|К архиву журналов]]//​ 
 +</​style>​ 
 + 
 +{{tag>​Система Администрирование Full_Circle BASH Скрипты Резервирование}}
  
-Удачи,​*Ронни,​*Редактор Full Circle Magazine*ronnie@fullcirclemagazine.org