Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
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 |