Что такое Crontab и как запланировать выполнение задачи в Unix-системах

Ответ

Crontab (cron table) — это стандартный планировщик задач в Unix-подобных операционных системах, который позволяет автоматически выполнять команды или скрипты в заданное время.

Для редактирования файла с задачами текущего пользователя используется команда:

crontab -e

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

минута час день_месяца месяц день_недели команда

  • минута: 0-59
  • час: 0-23
  • день_месяца: 1-31
  • месяц: 1-12
  • день_недели: 0-7 (0 и 7 — воскресенье)

Пример: Запуск Python-скрипта каждые 5 минут.

*/5 * * * * /usr/bin/python3 /home/user/projects/my_script.py >> /home/user/projects/my_script.log 2>&1

Ключевые моменты при настройке:

  1. Абсолютные пути: Всегда используйте полные пути к исполняемым файлам (например, /usr/bin/python3) и скриптам, так как cron выполняется в ограниченном окружении без привычных переменных PATH.
  2. Права на выполнение: Убедитесь, что скрипт имеет права на исполнение (chmod +x my_script.py).
  3. Перенаправление вывода: Чтобы отслеживать ошибки и результаты выполнения, перенаправляйте стандартный вывод (stdout) и вывод ошибок (stderr) в лог-файл (>> /path/to/log.log 2>&1).
  4. Альтернативы: Для более сложных рабочих процессов с зависимостями и очередями стоит рассмотреть такие инструменты, как Celery или Apache Airflow.

Ответ 18+ 🔞

Слушай, а вот этот ваш крон, он же как бабушкин будильник, только для сервера, блядь! Заводишь его, а он тебе в нужное время команду выполняет, хоть ночью, хоть в воскресенье. Просто пиздец какой удобный!

Чтобы свои шедевры туда вписать, надо крикнуть в консоль вот эту магическую хуйню:

crontab -e

И тебе откроется файлик, где ты и будешь творить своё расписание, как какой-нибудь начальник цеха, блядь.

А расписание это, ёпта, выглядит как строка из пяти цифр и команды. Цифры — это когда хуярить, а команда — что именно хуярить. Разбираем по косточкам:

  • Минута (0-59): Когда в часе? В 15-ю? В 30-ю? Или каждую, ёб твою мать?
  • Час (0-23): В котором часу? В три ночи? В пять вечера?
  • День месяца (1-31): Какого числа? В первый день? В последний?
  • Месяц (1-12): В январе? В июле? Или каждый месяц, нахуй?
  • День недели (0-7): В понедельник (1)? В воскресенье (0 или 7)? В выходные?

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

*/5 * * * * /usr/bin/python3 /home/user/projects/my_script.py >> /home/user/projects/my_script.log 2>&1

Видишь */5 на первом месте? Это значит "каждые пять минут". А звёздочки на остальных — это "в любой час, в любой день, в любой месяц". Короче, постоянно, без передышки!

А теперь, сука, главные подводные камни, о которые все расшибают лбы:

  1. Абсолютные пути, блядь! Крон — он как слепой крот, он нихуя не видит твой привычный PATH. Поэтому все пути — от корня и до самого файла! И к питону тоже: не просто python3, а /usr/bin/python3. Иначе будет искать-искать и нихуя не найти, пидарас.
  2. Права, ёпта! Твой скрипт должен быть исполняемым. Не забывай про chmod +x my_script.py, а то крон на него посмотрит как на говно и пойдёт дальше.
  3. Куда смотреть-то? Если не сказать крону, куда писать результаты, он их просто выбросит в никуда, и ты будешь сидеть и гадать: "Ну что, сука, работает или нет?" Поэтому всегда пили вывод в лог-файл вот этой прибамбасиной >> /path/to/log.log 2>&1. Тогда и обычные сообщения, и ошибки все там будут, как на ладони.
  4. Если всё совсем овердохуища сложно — если у тебя там цепочки задач, очереди и прочая дичь — то крон может и сдаться. Тогда уже смотри в сторону всяких Celery или Apache Airflow, они для таких оргий и придуманы. Но для простых "раз в час запусти" — крон твой лучший друг, блядь!