Понимание Cron Jobs и синтаксиса cron
В этом шаге мы познакомимся с Cron Jobs (задачами cron) и синтаксисом cron.
Cron Jobs - это "запланированные задачи" в системе Linux, обычно используемые для планирования выполнения команд, которые должны выполняться периодически, например, регулярные резервные копии данных или очистка кэша. Они называются Cron Jobs, потому что используют инструмент cron
(crontab).
Cron Jobs - один из наиболее часто используемых инструментов для системных администраторов, и они сами по себе очень полезны. Однако, если "запланированные задачи" настроены на выполнение с более высокими привилегиями пользователя (например, от имени пользователя root), злоумышленники могут использовать их для повышения привилегий.
Команда crontab использует следующий синтаксис:
* * * * * [ user ] File/Command
- - - - -
| | | | |
| | | | +----- День недели (0 - 7) (0 = воскресенье)
| | | +---------- Месяц (1 - 12)
| | +--------------- День месяца (1 - 31)
| +-------------------- Час (0 - 23)
+------------------------- Минуты (0 - 59)
Поле user
является необязательным. Если оно не указано, команда или скрипт будут выполнены с привилегиями текущего пользователя.
Обратите внимание, что только пользователь root может указать выполнение команд или скриптов с привилегиями других пользователей.
Например, если мы хотим выводить журнал ошибок Apache каждый час, мы можем использовать следующую команду:
0 * * * * echo /var/log/lastlog
Поскольку hour
(час), day
(день), month
(месяц) и week
(неделя) все установлены в *
, запланированная задача будет выполняться каждый раз, когда минута достигает 0, то есть каждый час.
Что делать, если нам нужно выполнить команду каждые два часа в 15 минут? Мы можем внести простое изменение:
15 */2 * * * echo /var/log/lastlog
Для того чтобы понять использование cron
, давайте рассмотрим пример.
-
Откройте терминал и перейдите в каталог /home/labex/project
. Затем выполните следующую команду для инициализации лабораторной среды:
./env_setup1.sh
После успешной инициализации вы увидите файл cleanup.py
и каталог trashDirectory
в домашнем каталоге пользователя labex. В каталоге trashDirectory
находятся два файла: error.log
и readme.txt
.
Цель нашей лабораторной работы следующая: Используйте crontab
для добавления запланированной задачи, которая вызывает скрипт cleanup.py
каждую минуту для очистки всех данных в каталоге /home/labex/project/trashDirectory
. Скрипт cleanup.py
просто вызывает системную команду rm
с помощью функции os.system()
для очистки каталога /home/labex/project/trashDirectory
.
-
Затем используйте следующую команду для добавления запланированной задачи в crontab:
echo "* * * * * root python /home/labex/project/cleanup.py" | sudo tee -a /etc/crontab > /dev/null
Вышеуказанная команда добавляет запланированную задачу в файл crontab. Задача будет выполняться каждую минуту
, и скрипт cleanup.py
будет выполнен с привилегиями root.
-
Поскольку служба cron отключена по умолчанию на нашей лабораторной машине, нам нужно вручную запустить ее с помощью следующей команды:
sudo service cron start
Ожидаемый вывод:
* Starting periodic command scheduler cron
Через примерно минуту
, если мы войдем в каталог /home/labex/project/trashDirectory
и используем команду ls
, мы увидим, что данные в каталоге были очищены, что означает, что задача cron выполняется правильно.