Введение
В этой лабораторной работе вы изучите основы планирования задач в среде Linux. Вы познакомитесь с двумя важнейшими консольными утилитами: at, предназначенной для запуска разовых заданий в определенное время в будущем, и cron, используемой для автоматизации повторяющихся задач, которые должны выполняться регулярно — например, ежедневно, еженедельно или ежемесячно.
Вы начнете с подготовки лабораторной среды, убедившись, что службы at и cron установлены и активны. Затем вы попрактикуетесь в создании разового задания с помощью команды at и управлении очередью задач через atq и atrm. В завершение вы воспользуетесь командой crontab для создания, проверки и удаления повторяющегося задания cron, что даст вам практический опыт автоматизации рутинных задач системного администрирования.
Подготовка лабораторной среды
На этом этапе вы подготовите окружение, установив необходимые инструменты для планирования задач. Основными инструментами будут at для разовых поручений и cron для периодических. Хотя cron обычно предустановлен в большинстве дистрибутивов Linux, утилиту at может потребоваться установить вручную.
Для начала обновим список пакетов, чтобы гарантированно получить последнюю версию программного обеспечения.
sudo apt-get update
Вы увидите процесс загрузки списков пакетов из репозиториев.
Затем установите пакет at с помощью команды apt-get. Флаг -y автоматически подтверждает установку, поэтому система не будет запрашивать ваше согласие.
sudo apt-get install -y at
В терминале отобразится ход установки. Как только процесс завершится, команда at станет доступна в системе.
Работа команды at зависит от фоновой службы (демона) под названием atd, которая исполняет запланированные задания. Нам нужно убедиться, что эта служба запущена. Проверить её статус можно командой systemctl.
sudo systemctl status atd
В выводе должно быть указано, что служба active (running).
● atd.service - Deferred execution scheduler
Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since <date_time>; <time_ago>
Docs: man:atd(8)
Main PID: <pid> (atd)
Tasks: 1 (limit: 4622)
Memory: 248.0K
CPU: 11ms
CGroup: /system.slice/atd.service
└─<pid> /usr/sbin/atd -f
Если служба не активна, вы можете запустить её следующей командой:
sudo systemctl start atd
Наконец, давайте проверим, активна ли служба cron, так как она понадобится нам на последующих этапах.
sudo systemctl status cron
Вывод также должен показать статус active (running), подтверждая, что демон cron готов к обработке запланированных задач.
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since <date_time>; <time_ago>
Docs: man:cron(8)
Main PID: <pid> (cron)
Tasks: 1 (limit: 4622)
Memory: 1.1M
CPU: 40ms
CGroup: /system.slice/cron.service
└─<pid> /usr/sbin/cron -f
Теперь, когда службы atd и cron запущены, ваша среда полностью готова к работе с планировщиками.
Планирование разового задания с помощью команды at
На этом этапе вы научитесь использовать команду at для планирования задачи, которая должна выполниться один раз в будущем. Это удобно для запуска скриптов или команд, которые не требуют немедленного исполнения, но и не должны повторяться регулярно. Команда at считывает последовательность команд из стандартного ввода и объединяет их в одно задание, которое будет выполнено в указанное время.
Давайте запланируем простую команду, которая создаст файл at_output.txt в вашем текущем рабочем каталоге (~/project). Мы настроим запуск через одну минуту.
Сначала вызовите команду at, указав желаемое время.
at now + 1 minute
После нажатия Enter приглашение командной строки изменится на at>. Это означает, что утилита ожидает ввода команд, которые вы хотите запланировать. Введите команду для создания файла и записи в него текста.
echo "The at job executed successfully." > ~/project/at_output.txt
Нажмите Enter после ввода команды. Чтобы завершить создание задания и выйти из режима ввода at>, нажмите Ctrl-D (удерживая клавишу Ctrl, нажмите D). Вы увидите подтверждение того, что задание запланировано, а также его номер и время выполнения.
warning: commands will be executed using /bin/sh
job 1 at Mon Jan 1 12:01:00 2024
Теперь нужно подождать одну минуту, пока задание сработает.
По истечении минуты вы можете убедиться, что задание было выполнено, проверив наличие файла at_output.txt. Используйте команду ls -l, чтобы увидеть сведения о файле.
ls -l ~/project/at_output.txt
Если задание прошло успешно, файл отобразится в списке.
-rw-r--r-- 1 labex labex 35 Jan 1 12:01 /home/labex/project/at_output.txt
Затем просмотрите содержимое файла с помощью команды cat, чтобы убедиться, что команда echo сработала правильно.
cat ~/project/at_output.txt
В терминале должен появиться следующий текст:
The at job executed successfully.
В завершение удалите созданный файл, чтобы поддерживать чистоту в рабочем каталоге.
rm ~/project/at_output.txt
Вы успешно запланировали, проверили и удалили результаты разового задания с помощью команды at.
Управление ожидающими заданиями с помощью atq и atrm
На этом этапе вы научитесь просматривать и отменять запланированные задания at. Часто бывает так, что после планирования задачи вы понимаете, что она больше не нужна или требует изменений. Команда atq позволяет просмотреть очередь ожидающих заданий, а команда atrm — удалить их.
Для начала запланируем задание на достаточно отдаленное время, чтобы у нас была возможность им поуправлять. Установим запуск через 10 минут.
at now + 10 minutes
В приглашении at> введите команду для создания файла. Назовем его temporary_job.txt.
touch ~/project/temporary_job.txt
Нажмите Enter, а затем Ctrl-D, чтобы сохранить задание. Система подтвердит создание и покажет номер задания. Запомните или запишите этот номер, так как он понадобится для удаления.
warning: commands will be executed using /bin/sh
job 2 at Mon Jan 1 12:10:00 2024
(Примечание: ваш номер задания и время будут отличаться.)
Теперь, чтобы увидеть список всех ожидающих заданий, воспользуйтесь командой atq (at queue).
atq
Вывод покажет ваше запланированное задание, его номер, дату и время запуска, очередь (a) и пользователя, создавшего задачу.
2 Mon Jan 1 12:10:00 2024 a labex
Предположим, вы решили, что это задание больше не должно выполняться. Вы можете отменить его с помощью команды atrm (at remove), указав номер задания.
Замените <job_number> в команде ниже на ваш реальный номер задания. Например, если номер задания 2, введите atrm 2.
atrm <job_number>
Если удаление прошло успешно, команда ничего не выведет.
Чтобы убедиться, что задание удалено из очереди, снова запустите atq.
atq
На этот раз команда не должна ничего вывести. Это подтверждает, что очередь заданий at пуста и файл temporary_job.txt не будет создан.
Создание повторяющегося задания с помощью crontab -e
На этом этапе вы научитесь планировать периодические задачи с помощью cron. В отличие от at, который запускает задачу один раз, cron предназначен для многократного выполнения заданий по расписанию. Управление такими задачами происходит через специальный файл, называемый crontab.
Для редактирования файла crontab вашего пользователя используется команда crontab -e (флаг -e означает "edit" — редактировать).
Откроем файл crontab для внесения изменений.
crontab -e
Если вы запускаете crontab -e впервые, система может предложить выбрать текстовый редактор по умолчанию. Мы рекомендуем nano, так как он наиболее прост в освоении.
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
...
Choose 1-2 [1]:
Введите 1 и нажмите Enter, чтобы выбрать nano. Откроется файл crontab. Он будет почти пустым, за исключением комментариев с инструкциями по использованию.
Запись в crontab имеет строго определенный формат из шести полей:
минута час день-месяца месяц день-недели команда
Символ звездочки (*) в поле времени работает как подстановочный знак, означающий "каждый". Для нашей задачи мы хотим запускать команду каждую минуту. Это удобно для тестирования, так как результат виден почти сразу. Расписание для запуска "каждую минуту" выглядит так: * * * * *.
Добавьте новую строку в конец файла, чтобы запланировать задание, которое будет дописывать текущую дату и время в лог-файл cron_log.txt в вашем рабочем каталоге.
* * * * * date >> ~/project/cron_log.txt
После добавления строки ваш редактор должен выглядеть примерно так:
## Edit this file to introduce tasks to be run by cron.
#
## Each task to run has to be defined through a single line
## indicating with different fields when the task will be run
## and what command to run for the task
#
## To define the time you can provide concrete values for
## minute (m), hour (h), day of month (dom), month (mon),
## and day of week (dow) or use '*' in these fields (for 'any').
#
## Notice that tasks will be started based on the cron's system
## daemon's notion of time and timezones.
#
## Output of the crontab jobs (including errors) is sent through
## email to the user the crontab file belongs to (unless redirected).
#
## For example, you can run a backup of all your user accounts
## at 5 a.m. every week with:
## 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
## For more information see the manual pages of crontab(5) and cron(8)
#
## m h dom mon dow command
* * * * * date >> ~/project/cron_log.txt
Чтобы сохранить файл и выйти из nano, нажмите Ctrl-X, затем Y для подтверждения изменений и Enter для записи файла.
После выхода в терминале появится подтверждение:
crontab: installing new crontab
Это означает, что ваше новое задание cron активировано. Демон cron теперь будет проверять этот файл каждую минуту и выполнять вашу команду.
Подождите хотя бы одну минуту. Затем проверьте, был ли создан лог-файл.
ls -l ~/project/cron_log.txt
Вы должны увидеть файл в списке.
-rw-r--r-- 1 labex labex 29 Jan 1 12:15 /home/labex/project/cron_log.txt
Теперь просмотрите его содержимое.
cat ~/project/cron_log.txt
Вывод покажет дату и время первого выполнения команды.
Mon Jan 1 12:15:01 UTC 2024
Если вы подождете еще минуту и снова выполните команду cat, вы увидите новую строку с обновленной меткой времени, что доказывает циклическое выполнение задания.
Проверка и удаление задания Cron с помощью crontab -l и -r
На этом заключительном этапе вы научитесь просматривать список запланированных заданий cron без открытия редактора, а также полностью удалять их. Это важные навыки для поддержания порядка в системе.
Сначала выведем список текущих активных заданий cron. Команда crontab -l (флаг -l от "list" — список) отображает содержимое вашего файла crontab прямо в терминале.
crontab -l
Вывод покажет задание, созданное на предыдущем шаге.
## Edit this file to introduce tasks to be run by cron.
## ... (прочие комментарии) ...
## m h dom mon dow command
* * * * * date >> ~/project/cron_log.txt
Эта команда является безопасным способом просмотра расписания в режиме "только чтение".
Теперь предположим, что это повторяющееся задание вам больше не нужно. Чтобы удалить его, используйте команду crontab -r (флаг -r от "remove" — удалить). Будьте очень осторожны: эта команда удаляет весь файл crontab вашего пользователя без дополнительного подтверждения.
Выполните команду для удаления вашего crontab.
crontab -r
При успешном выполнении команда ничего не выведет.
Чтобы убедиться, что crontab удален, снова запустите команду просмотра списка.
crontab -l
На этот раз команда вернет сообщение об ошибке, указывающее на отсутствие файла crontab.
no crontab for labex
Это подтверждает, что ваше задание успешно удалено и больше не будет запускаться.
Наконец, чтобы завершить лабораторную работу и очистить рабочее пространство, удалите файл cron_log.txt, созданный планировщиком.
rm ~/project/cron_log.txt
Вы успешно прошли весь цикл управления заданиями cron: от создания и проверки до полного удаления.
Резюме
В этой лабораторной работе вы научились подготавливать среду Linux для планирования задач, устанавливая пакет at и проверяя работу служб atd и cron. Вы попрактиковались в создании разовых заданий с помощью команды at. Также вы освоили управление очередью таких задач, используя atq для просмотра и atrm для удаления конкретных заданий.
Кроме того, вы изучили способы планирования повторяющихся задач с помощью cron. Вы использовали команду crontab -e для редактирования расписания пользователя и добавления новых автоматизированных заданий. Наконец, вы научились проверять список текущих задач cron с помощью crontab -l и полностью очищать расписание пользователя командой crontab -r.



