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

Различия

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

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

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