5 примеров Crontab, которые помогут вам автоматизировать задачи Linux

Программа cron автоматизирует выполнение других программ в Linux. Cron – это демон, который работает постоянно и запускает другие программы по заданному расписанию. Это расписание определяют несколько разных файлов. По отдельности они известны как crontab.

Cron может запланировать любую команду или задачу Unix. Иногда вам нужно работать с простой командой. В других случаях вам потребуется написать сценарий для выполнения всей задачи. Cron отлично работает с любым подходом. Он также поддерживает сложные правила планирования и гибкие способы работы с выводом скрипта.

Независимо от того, выполняете ли вы простые пользовательские задачи или полномасштабное системное администрирование, понимание того, как работает cron на практических примерах, является обязательным.

1. Очистка файла Up / tmp с помощью общесистемного файла Crontab

Каталог / tmp – это временное место для общего использования любой программой или пользователем системы. Многие системы Unix удаляют старые файлы в каталоге / tmp во время запуска. Другие планируют эту операцию, часто используя cron.

Однако, если вы хотите настраивать этот процесс или применить его к другому каталогу, настройка быстрой задачи cron – простой способ сделать это.

Вот один из способов очистки / tmp или любого другого каталога по вашему выбору:

 1 3 * * * /usr/bin/find /tmp -type f -atime +10 -delete

Ежедневно в одну четверть четвертого cron будет выполнять эту команду. Он использует команду find для поиска файлов в каталоге / tmp. Он отфильтровывает все, кроме обычных файлов, которые в последний раз были изменены не менее 10 дней назад. Затем он удаляет все найденные файлы.

Вы должны добавить такую ​​команду в глобальный crontab, например / etc / crontab или root crontab, используя sudo crontab -e . Команда должна запускаться от имени пользователя root, чтобы она могла удалять файлы в / tmp независимо от того, кому они принадлежат.

Обратите внимание, что в этом примере указывается полный путь к команде поиска. Cron использует базовую настройку PATH для поиска исполняемых файлов, поэтому, если команда находится в стандартном месте (например, / usr / bin ), в этом нет необходимости. Вы можете указать альтернативный PATH в самом crontab, если предпочитаете такой подход. Но использование полного пути для команд немного более устойчиво.

Если вы работаете над проектом, который записывает журналы или хранит кэшированные данные, такой подход может быть жизненно важным, если вы удаляете файлы для очистки дискового пространства. Хотя приведенный выше пример представляет собой быстрый и грязный подход, вам следует использовать такую ​​команду, как tmpwatch , если она доступна.

2. Резервное копирование базы данных дважды в день

С этого момента давайте сосредоточимся на пользовательских задачах, которыми вы можете управлять через локальный crontab. Вы можете редактировать crontab текущего пользователя, используя следующую команду:

 crontab -e

Этот crontab должен содержать задачи, относящиеся к вашей учетной записи. Представьте, что вы работаете над проектом, включающим заполнение базы данных MySQL. Вы можете использовать инструмент mysqldump для создания дампа SQL всей базы данных. Перенаправляя его вывод, вы можете легко создавать резервные копии базы данных по расписанию.

 30 4 * * * /usr/local/mysql/bin/mysqldump --login-path=local --databases albums > /tmp/album-db.$(date +%s).sql

По умолчанию cron отправляет вывод (включая ошибки) по электронной почте пользователю, которому принадлежит файл crontab. Но вы можете перенаправить вывод так же, как из командной строки, используя нотацию > filename .

Обратите внимание, как в приведенном выше примере используется подстановка команд для создания имени файла на основе текущей временной метки Unix. Поскольку символ % имеет особое значение для cron, команда должна экранировать его с помощью предшествующей обратной косой черты.

3. Проверка работоспособности сайта с помощью специального скрипта.

Вы могли заметить, что команда в последнем примере была слишком длинной. К счастью, ничто не мешает вам сохранять команды в сценарии и выполнять их через crontab. Вот пример, который запускает скрипт каждую минуту:

 * * * * * /Users/bobby/bin/site-monitor.sh

Обратите внимание, что теоретически вы можете использовать переменную HOME или расширение тильды для более короткой команды:

 * * * * * ~/bin/site-monitor.sh

Вы можете избежать этого, если cron когда-нибудь перестанет его поддерживать. Нет никакого реального вреда в использовании полного пути, и, возможно, он более читабелен.

Сам сценарий использует программу curl для получения кода состояния HTTP для заданного URL-адреса. Если статус указывает на что-либо, кроме успеха, сценарий выводит сообщение на вывод.

Как упоминалось ранее, cron отправит нам этот вывод по электронной почте. Может быть полезно, чтобы команды в cron не выводили результат в случае успеха.

 #!/bin/bash
STATUS=`curl -s -o /dev/null -I -w "%{http_code}" http://example.com/`
if [ "$STATUS" != "200" ]
then
echo "site appears to be down"
fi

4. Отчеты о дисковом пространстве по электронной почте.

Если вы хотите изменить поведение электронной почты по умолчанию для cron, вы можете использовать переменную среды MAILTO . Cron поддерживает несколько переменных, которые вы можете установить в файле crontab. Затем Cron применяет эти переменные к среде каждой следующей команды.

Чтобы установить альтернативный целевой адрес электронной почты, используйте следующий формат:

 [email protected]

Вам нужно будет запустить это на машине, настроенной для отправки внешнего электронного письма, если это необходимо. Вот пример, который отправит электронное письмо другому пользователю на том же компьютере. Ходит два раза в день – в 12:00 и 23:00. Команда df отображает свободное дисковое пространство, поэтому эта запись crontab делегирует задачу проверки того, что дисковое пространство выглядит нормально:

 MAILTO="sarah"
0 12,23 * * * /bin/df -h

Полученное электронное письмо будет выглядеть примерно так:

Обратите внимание, что cron добавляет свои собственные заголовки электронной почты. Это может быть полезно для отладки. Вы также можете отключить поведение электронной почты по умолчанию cron, используя пустую строку:

 MAILTO=""

5. Транслируйте сообщение в определенное время

В других примерах используется довольно простое планирование, но cron поддерживает мощный синтаксис для определения времени. Он обрабатывает не только точные совпадения, но также:

  • Несколько значений, разделенных запятой ( , )
  • Диапазоны, указанные через дефис ( )
  • Значения шага после косой черты ( / )

Так, например, если вы хотите отправлять сообщение всем вошедшим в систему пользователям два раза в час в рабочее время, но только каждые три часа, достаточно будет примерно следующего:

 0 15,45 9-17/3 ? * * * echo 'Enjoy your work!' | wall

Эта команда будет выполняться в 15 и 45 минут каждого часа каждые три часа с 9 утра до 5 вечера. Команда wall отправляет сообщение каждому вошедшему в систему пользователю терминала.

Возможно, вы даже обнаружите, что cron предлагает более гибкое планирование, чем ваше приложение-календарь. Некоторые варианты позволяют указать команды для выполнения во вторую пятницу месяца или в ближайший к определенной дате будний день.

Cron может автоматизировать многие типы задач Linux

Это небольшой набор задач, которые cron может помочь вам автоматизировать. Чтобы освоиться со сложным синтаксисом, может потребоваться некоторое время, но cron – мощная утилита. Вы можете использовать cron как для общесистемных задач, так и для пользовательских.

Обладая сложным синтаксисом для планирования, cron является мощным средством, но у вас, вероятно, должен быть хороший справочник. Crontabs разрешает комментарии, поэтому вы можете включить строку комментария в свою, чтобы задокументировать поля времени.