Канал для программистов работающих с Linux.
Почти все Python девелоперы с нами ну и другие тоже подтянутся.
По рекламе: @jannytg
@anothertechrock
Post #592
294
⚙️ Как устроена автоматизация задач через cron в Linux
Если вам нужно регулярное выполнение скрипта без ручного запуска, вам поможет cron. Это системный демон (
Все задачи хранятся в специальной таблице — crontab.
🟪 Синтаксис расписания
Запись состоит из 5 полей времени и самой команды:
🚩Полезные спецсимволы:
🟪 Примеры:
🔎
каждый день в 04:00
🔎
каждые 30 минут в рабочие часы по будням
🔎
каждое воскресенье в полночь
❗️ Проверить или составить сложное выражение удобнее всего на crontab.guru.
🟪 Практический пример
Допустим, нужно раз в неделю чистить старые логи приложения в папке
Делаем файл исполняемым:
Открываем редактор crontab:
Добавляем задачу:
Что здесь происходит:
🚩 Базовые команды для работы
⚠️ Важно: при редактировании через
Если вам нужно регулярное выполнение скрипта без ручного запуска, вам поможет cron. Это системный демон (
crond), который раз в минуту проверяет свое расписание и запускает запланированные задачи.Все задачи хранятся в специальной таблице — crontab.
🟪 Синтаксис расписания
Запись состоит из 5 полей времени и самой команды:
* * * * * /path/to/command
│ │ │ │ │
│ │ │ │ └── День недели (0–7, где 0 и 7 — воскресенье)
│ │ │ └──── Месяц (1–12)
│ │ └─────── День месяца (1–31)
│ └──────── Час (0–23)
└────────── Минута (0–59)
🚩Полезные спецсимволы:
* — любое значение (каждую минуту, каждый час и т.д.);, — перечисление значений (1,15,30 — в 1, 15 и 30 минут);- — диапазон (1-5 в поле дня недели означает "с понедельника по пятницу");/ — шаг интервала (*/15 — каждые 15 минут).🟪 Примеры:
🔎
0 4 * * *каждый день в 04:00
🔎
*/30 9-18 * * 1-5 каждые 30 минут в рабочие часы по будням
🔎
0 0 * * 0 каждое воскресенье в полночь
❗️ Проверить или составить сложное выражение удобнее всего на crontab.guru.
🟪 Практический пример
Допустим, нужно раз в неделю чистить старые логи приложения в папке
~/myapp/logs. Создаем скрипт clear_logs.sh:#!/bin/bash
# Задаем PATH, чтобы cron гарантированно нашел утилиту find
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LOG_DIR="$HOME/myapp/logs"
DAYS_TO_KEEP=7
find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
Делаем файл исполняемым:
chmod +x ~/scripts/clear_logs.sh
Открываем редактор crontab:
crontab -e
Добавляем задачу:
0 0 * * 0 /home/user/scripts/clear_logs.sh >> /home/user/scripts/clear_logs.log 2>&1
Что здесь происходит:
0 0 * * 0 — запуск каждое воскресенье в 00:00.>> .../clear_logs.log — перенаправление стандартного вывода (stdout) в файл лога.2>&1 — перенаправление ошибок (stderr) туда же, чтобы не потерять информацию о сбоях.🚩 Базовые команды для работы
crontab -l — посмотреть список текущих задач пользователяcrontab -e — открыть редактор для создания/изменения задачcrontab -r — удалить все задачи текущего пользователя⚠️ Важно: при редактировании через
crontab -e обязательно оставляйте пустую строку в самом конце файла, иначе последняя задача может не выполниться.- 👍 2