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