Как использовать Crontab для автоматизации повторяющихся задач в Linux

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

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

Что такое Кронтаб?

Crontab – это процесс-демон, который работает в фоновом режиме почти на всех машинах Linux и используется для планирования и выполнения автоматических задач через определенные промежутки времени. Он также часто используется разработчиками программного обеспечения для выполнения трудоемких задач в фоновом режиме.

Это может быть что угодно, включая, но не ограничиваясь, отправку пакетных писем, проверку ленты Twitter, выполнение резервного копирования или просто напоминание.

Основные команды Crontab

У каждого пользователя Linux на машине есть собственный файл crontab, содержащий их активные задания crontab. Вот несколько основных команд терминала, которые вы будете использовать для просмотра и изменения файла crontab:

  • crontab-l — Список всех заданий crontab.
  • crontab -e — Отредактируйте файл crontab.
  • crontab -r — Удалить все записи из файла crontab.

Вышеупомянутые команды будут для файла crontab текущего пользователя . Если вам нужно изменить файл crontab другого пользователя, просто используйте параметр -u . Например, вы можете отредактировать файл crontab пользователя jdoe с помощью команды:

 sudo crontab -ujdoe -e

Формат заданий Crontab

Каждое задание crontab состоит из одной строки и имеет следующий формат:

 MINUTE HOUR DAY MONTH WEEKDAY COMMAND

В приведенной ниже таблице объясняются различные элементы задания crontab:

Элемент Ranage Описание
Минуты 0–59 Минута, в которую нужно выполнить задание crontab.
Час 0–23 Час, в который нужно выполнить задание crontab.
День 1–31 День месяца, в который нужно выполнить задание crontab.
Месяц 1–12 Месяц, в котором нужно выполнить задание crontab.
Будний день 0–6 День недели, в который нужно выполнить задание crontab.
Команда Любая команда Linux, которую можно выполнить на терминале.

Вы можете использовать звездочку (*) в любом из полей для обозначения подстановочного знака, что означает, что задание crontab будет выполняться независимо от этого периода времени. Например, приведенное ниже задание crontab будет выполняться каждую ночь ровно в 3:20 утра:

 20 3 * * * /root/backup.sh

Несколько значений

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

 20,50 * * * * /path/to/command.sh

Однако, если вы хотите выполнять задание crontab через определенные промежутки времени в течение определенного периода времени, вы можете использовать * / PERIOD , и приведенное ниже задание crontab будет автоматически выполняться через 15 минут после каждого часа каждые три часа:

 15 */3 * * * /path/to/command.sh

Сохранение спокойствия заданий Crontab

В зависимости от обстоятельств вы можете удалить весь вывод заданий crontab, чтобы они не попадали в почтовую папку вашей системы. Вы можете сделать это, добавив > / dev / null 2> & 1 к любому заданию crontab. Например:

 0 6 15 * * /path/to/backup.sh > /dev/null 2>&1

Добавление заданий Crontab

Как правило, наиболее часто используемый метод добавления или изменения заданий crontab – это команда crontab -e . Запустите эту команду в терминале:

 crontab -e

Это откроет текстовый редактор, такой как nano, с содержимым вашего файла crontab. Каждое задание crontab находится в одной строке, и вы можете добавлять, изменять и удалять строки по желанию. После этого сохраните и закройте файл, нажав Ctrl + W , а затем клавиши Y и Enter , которые немедленно активируют все задания crontab в файле.

Ярлык для добавления вакансий

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

 0 14 * * 0 /path/to/command.sh

Вы можете добавить задание в файл crontab с помощью одной команды:

 (crontab -l; echo "0 14 * * 0 /path/to/command.sh";) | crontab

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

Список / удаление файла Crontab

Вы можете перечислить все активные в данный момент задания в файле crontab с помощью команды:

 crontab -l

Вы также можете удалить все задания crontab и очистить содержимое файла crontab с помощью команды:

 crontab -r

Пример: Play Sounds!

Вам нужно каждые два часа напоминать о том, что время прошло? Возьмите свой любимый аудиоклип практически в любом формате (.wav, .mp4, любой другой), и если он сохранен (например) в /home/myuser/myalert.wav , пусть он автоматически проиграется с помощью задания crontab:

 0 */2 * * * aplay /home/myuser/myalert.wav

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

 0 17 * * 5 aplay /home/myuser/friday_song.mp4

Пример: резервное копирование файлов с помощью Rsync

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

Пример: проверьте, находятся ли сайты в сети

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

 
<?php
// E-mail address to notify of sites down
$email = '[email protected]';
// Define URLs to check
$urls = [
'https://apexpl.io',
'https://google.com',
'https://some-junk-site-that-will-hopefully-never-exist.com'
];
// Go through URLs
$down = [];
foreach ($urls as $url) {
// Check URL
$status = check_url($url);
if ($status != 200) {
$down[] = $url;
}
}
// Send e-mail if we have down sites
if (count($down) > 0) {
mail($email, "Urgent - Sites Down!", "Your bot has detected the following sites are currently down:
" . implode("
", $down));
}
// Exit
exit(0);

/**
* Check URL
*/
function check_url(string $url):int
{
// Send via cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
// Get status, and close connection
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Return
return $status;
}

Просто измените адрес электронной почты и желаемые URL-адреса, чтобы проверить их в верхней части файла, и сохраните их где-нибудь, например, /home/myuser/check_sites.php . Чтобы этот сценарий запускался каждые пять минут и уведомлял вас по электронной почте обо всех неработающих сайтах, добавьте задание crontab:

 */5 * * * * /usr/bin/php /home/myuser/check_sites.php > /dev/null 2>&1

Автоматизируйте свою жизнь!

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

Вы узнали, что такое crontab, о файле crontab, о форматировании заданий crontab и о некоторых реальных примерах того, как его можно использовать.