- Покоряй и Властвуй: Автоматизация действий
- Задачи cron и автоматизация в Linux
- Что такое cron?
- Что собой представляют задачи cron?
- Доступ к cron
- Как добавлять задачи cron в Linux
- Синтаксис задач cron
- Примеры cron-задач
- Как создавать задачу cron
- Возможные проблемы и их решение
- 1. Проверьте расписание
- 2. Просмотрите логи cron
- 3. Перенаправьте output в файл
- Итоги
- Командная строка Linux и автоматизация рутинных задач
Покоряй и Властвуй: Автоматизация действий
В этой статье мы рассмотрим автоматизацию ежедневных рутинных действий и создадим рабочее решение для резервного копирования. Во-первых, «сценарий bash» — это сценарий, состоящий из обычных команд bash и некоторых операторов, которые нечасто используются в командной строке (условия if-then-else, циклы while и т.д.), а cron — это демон (фоновая служба), который выполняет команды, перечисленные в пользовательском файле crontab (поэтому если вам нужно запустить задачу, требующую прав суперпользователя, то редактировать следует файл crontab, принадлежащий пользователю root). Мы будем использовать простой сценарий (всего в одну строчку), который объединяет в один текстовый файл все файлы .java из одного каталога. Вы можете изменить сценарий, например, для объединения файлов журналов. Я объясню, как он работает, а затем расскажу, как настроить cron, чтобы сценарий запускался каждые 6 часов. Я предпочитаю создавать сценарии в редакторе nano, но если вам удобнее пользоваться текстовым редактором с графическим интерфейсом, просто замените «nano» на «gedit» (без кавычек). Введите команду:
В терминале откроется редактор nano с совершенно пустым файлом. Введите следующие строки (скоро я их поясню):
#!/bin/bash find $HOME/workspace/Year\ 11 -name '*.java' | while read line; do cat "$"; done
Чтобы сохранить файл, нажмите Ctrl + X и Enter . Чтобы сделать его исполняемым, выполните следующую команду:
Теперь сценарий можно запустить (строчка #!/bin/bash в начале сценария указывает на программу, которую Ubuntu должна вызвать для его обработки), выполнив в терминале:
или создав символьную ссылку в /usr/bin (тогда сценарий можно будет запускать, как любую другую программу):
sudo ln -s //FileCondenser /usr/bin/FileCondenser
Замените на полный (как того требуют символьные ссылки) путь к свежесозданному сценарию.
Основа сценария — команда find, которая находит в каталоге eclipse все файлы, оканчивающиеся на .java. Затем вывод команды find передаётся циклу while, который в свою очередь построчно считывает найденные файлы и последовательно выводит строки, до тех пор, пока они не закончатся.
Как я уже говорил, можно изменить путь в сценарии, например, на /var/log/:
find /var/logs/ -name “*.log”|while read line; do cat “$”; done
Этот вариант сценария сольёт воедино все файлы .log из каталога /var/log/ (и подкаталогов) и отобразит результат в терминале. Или же можно перенаправить вывод в файл.
Чтобы теперь добавить сценарий в файл crontab, я предложил бы создать символьную ссылку, чтобы команда была короче. Но это не обязательно. Запустите редактор файла crontab:
Откроется файл crontab текущего пользователя. Если вы хотите редактировать crontab пользователя root (для сценариев резервного копирования и т.д.), запустите:
Важно помнить, что crontab использует определённый формат записей: . Каждой позиции должно соответствовать какое-то выражение, в роли которого может выступать числовое значение, символ подстановки или их комбинация. Например:
*/5 * * * * FileCondenser > $HOME/condenseFile.txt
Каждое воскресенье в 6 вечера:
00 18 * * sun FileCondenser > $HOME/condenseFile.txt
Для периодического резервирования журналов я бы предложил такую запись:
* */2 * * * FileCondenser > $HOME/condenseFile.txt
Таким образом, сценарий будет запускаться раз в два часа, а результат будет храниться в вашей домашней папке в файле condenseFile.txt. Наконец, приведу пример простого сценария для резервного копирования. Этот сценарий архивирует определённый каталог или несколько каталогов (например, вашу домашнюю папку или каталог root) на резервный раздел или на внешний жёсткий диск:
tar cvvzf /media/Backup/Music\ Backup/backup.tar.gz $HOME/Music
Предполагается, что ваш жёсткий диск или резервный раздел смонтирован в /media/Backup и на нём есть каталог «Music Backup». Команда tar запаковывает ваш каталог Music в tar-архив backup.tar.gz, сжатый при помощи gzip, и помещает его в каталог /media/Backups/Music Backup/. Можно запускать эту команду из crontab и без сценария, но если вы собираетесь делать резервирование всей системы (или, допустим, раздела root), то вы наверняка захотите указать длинный список каталогов, которые не нужно обрабатывать (возможно, этот список будет храниться в отдельном файле). Так что с использованием сценария это будет просто аккуратнее. Более того, сценарий можно запросто запустить из терминала. Я рекомендую всегда тестировать команды или сценарии на небольшом тестовом каталоге, прежде чем добавлять их в crontab, иначе можно столкнуться с проблемами.
Задачи cron и автоматизация в Linux
Если вы заняты в сфере IT, у вас часто может возникать потребность в автоматизации каких-то повторяющихся задач. Например, если нужно ежедневно делать бэкапы, ежемесячно архивировать логи, еженедельно удалять файлы для очистки пространства.
И если ваша рабочая ОС — Linux, для автоматизации всех этих процессов можно использовать такой инструмент как cron.
Что такое cron?
Cron — это утилита для составления расписания задач, имеющаяся в Unix-подобных системах. Функционал этой утилиты включается демоном crond и выполняется в фоне. Для запуска скриптов cron читает crontab («таблицы cron).
Вы можете настроить задачу cron, чтобы запланировать автоматическое выполнение скриптов или запуск команд. Для этого используется специальный синтаксис.
Когда речь идет об отдельных пользователях и их задачах, cron руководствуется файлом /var/spool/cron/crontabs.
Что собой представляют задачи cron?
Любая задача, которую вы запланировали в cron, называется задачей cron. Эти задачи помогают нам автоматизировать рутинные действия, выполняемые регулярно с определенной периодичностью.
Давайте рассмотрим подробнее работу cron-задач.
Доступ к cron
Чтобы пользователь имел доступ к задачам cron, админ должен разрешить это в файле /etc/cron.allow.
Если вы получаете уведомление, как на скриншоте ниже, значит, вам не разрешено использовать cron.
Чтобы разрешить Джону доступ к cron, включите его имя в /etc/cron.allow. После этого он сможет создавать и редактировать cron-задачи.
Пользователям также можно запретить доступ к cron-задачам, внеся их имена в файл /etc/cron.d/cron.deny.
Как добавлять задачи cron в Linux
Для начала нужно проверить статус сервиса cron. Если cron не установлен, вы можете без проблем загрузить его при помощи менеджера пакетов. Для проверки статуса введите следующую команду:
# Check cron service on Linux system sudo systemctl status cron.service
Синтаксис задач cron
Для добавления и вывода задач crontab используется следующие флаги:
- crontab -e: редактирование содержимого crontab для добавления, удаления или изменения задач.
- crontab -l: вывод всех cron-задач текущего пользователя.
- crontab -u username -l: вывод задач другого пользователя.
- crontab -u username -e: редактирование задач другого пользователя.
Выведя на экран задачи cron, вы увидите что-то типа этого:
# Cron job example * * * * * sh /path/to/script.sh
— звездочки * * * * * представляют минуты, часы, дни, месяцы и дни недели (соответственно).
Значение | Описание | |
---|---|---|
Минуты | 0-59 | Команда будет выполняться в указанную минуту. |
Часы | 0-23 | Команда будет выполняться в указанный час. |
Дни | 1-31 | Команда будет выполняться в указанный день месяца. |
Месяцы | 1-12 | Месяц, в котором должна выполняться команда. |
Дни недели | 0-6 | Дни недели, по которым должна запускаться команда. Здесь 0 — воскресенье. |
— sh говорит о том, что это bash-скрипт, и запускаться он должен из /bin/bash.
— /path/to/script.sh указывает путь к скрипту.
От редакции Techrocks. Нам показалось, что в пояснении синтаксиса не хватает подробностей, поэтому дополняем.
Указать периодичность меньше минуты нельзя, потому что cron читает расписание раз в минуту.
Время и дату выполнения можно указывать:
- звездочками * — тогда задача выполняется каждую/й — в зависимости от того, на какой позиции стоит звездочка
- целыми числами — чтобы указать точно время или дату
- целыми числами через запятую — перечисляем нужные минуты, часы и т. д.
- диапазонами, через дефис (например, 1-10) — чтобы задача выполнялась в определенный диапазон времени или дат
- с определенным шагом.
На последнем пункте остановимся подробнее. Для указания шага используется синтаксис */целое-число . Указанное целое число — шаг.
Например, если на позиции месяца стоит */4 , это значит, что задача будет выполняться каждый четвертый месяц . А если на позиции минут стоит 0-59/2 , это значит, что задача будет выполняться каждые две минуты.
Ниже представлена схема синтаксиса cron-задач.
* * * * * sh /path/to/script/script.sh | | | | | | | | | | | Команда или скрипт, которые нужно выполнить | | | | | | | | | | | | | | | | | | | День недели(0-6) | | | | | | | Месяц(1-12) | | | | | Число месяца(1-31) | | | Час(0-23) | Минута(0-59)
Примеры cron-задач
В таблице представлены три примера cron-задач.
Расписание | Значение |
---|---|
5 0 * 8 * | В 00:05 в августе |
5 4 * * 6 | В 04:05 в субботу |
0 22 * * 1-5 | В 22:00 ежедневно, с понедельника по пятницу |
Если вам не удается с лету понять, на когда назначено выполнение задач, не огорчайтесь. Вы можете попрактиковаться в генерации расписаний cron на crontab guru.
Как создавать задачу cron
В этом разделе мы рассмотрим пример того, как можно запланировать автоматический запуск простого скрипта.
1. Создайте скрипт с именем date-script.sh. Он должен выводить системную дату и время и добавлять их в файл. Скрипт выглядит так:
2. Сделайте этот скрипт исполняемым, отредактировав права при помощи chmod.
3. Добавьте скрипт в crontab при помощи crontab -e.
Мы указали, что скрипт должен выполняться каждую минуту:
4. Проверьте результат, просмотрев содержимое файла date-out.txt. В этом файле ежеминутно должна добавляться запись с системным временем.
Возможные проблемы и их решение
Cron-задачи очень полезны, но они не всегда срабатывают так, как вы задумали. К счастью, есть несколько эффективных способов справиться с этим.
1. Проверьте расписание
Для начала нужно проверить, что за расписание установлено для задачи. Сделать это можно при помощи команд crontab -l или crontab -u username -l (мы говорили о них ранее).
2. Просмотрите логи cron
Проверьте, запускается ли cron в намеченное время. Это можно посмотреть в логах, в var/log/cron. В некоторых дистрибутивах логи можно найти в /var/log/syslog.
Если в логах есть записи в соответствующее время, это означает, что сам cron запускается по расписанию.
Ниже представлен пример логов для задач cron. Обратите внимание на первый столбец с метками времени. В конце строк указаны запускаемые скрипты.
3. Перенаправьте output в файл
Вы можете перенаправить результаты работы cron в файл, чтобы поискать затем возможные ошибки.
# Redirect cron output to a file * * * * * sh /path/to/script.sh &> log_file.log
Итоги
Автоматизация задач уменьшает количество рутинной работы. Кроме того, машина может запускать задачи точно по указанному времени, и это не требует никакого вмешательства человека.
Автоматизация в Linux завязана на задачах cron, так что эту утилиту определенно стоит изучить. Поэкспериментируйте с ней!
Командная строка Linux и автоматизация рутинных задач
Также данная книга доступна ещё в библиотеке. Запишись сразу в несколько библиотек и получай книги намного быстрее.
Посоветуйте книгу друзьям! Друзьям – скидка 10%, вам – рубли
По вашей ссылке друзья получат скидку 10% на эту книгу, а вы будете получать 10% от стоимости их покупок на свой счет ЛитРес. Подробнее
По абонементу вы каждый месяц можете взять из каталога одну книгу до 700 ₽ и две книги из специальной подборки. Узнать больше
Рассмотрены команды Linux, основы работы в командной строке, а также настройка системы с помощью программ, обладающих только текстовым интерфейсом. Работа с системой выполняется только в режиме консоли, что требует определенной квалификации пользователя. Подробно описаны наиболее полезные команды Linux, особенности файловой системы Linux, криптографическая файловая система eCryptfs, система инициализации systemd, загрузчики GRUB и GRUB2, ядро 3.0. С позиции пользователя оценены интерактивные возможности оболочки zsh. Даны практические примеры разработки сценариев на языках оболочек bash и tcsh. Рассмотрено управление пакетами для наиболее актуальных на данный момент дистрибутивов. Для энтузиастов Linux написана отдельная глава о разработке собственного дистрибутива Linux и создании загрузочного LiveCD. Для системных администраторов, программистов и квалифицированных пользователей Linux.
Возрастное ограничение: 0+ Дата выхода на ЛитРес: 30 сентября 2014 Дата написания: 2012 Объем: 340 стр.
ISBN: 978-5-9775-0850-6 Общий размер: 14 MB Общее кол-во страниц: 340 Размер страницы: Правообладатель: БХВ-Петербург
Книга Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач» — скачать в pdf или читать онлайн. Оставляйте комментарии и отзывы, голосуйте за понравившиеся.