Cron в Ubuntu

Если нужно что-то сделать и спланировать по расписанию на сервере...

 

то пригодится Cron в Ubuntu

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

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

crontab -e

 Конечно, для начала нужно авторизоваться на своем сервере Ubuntu и только потом вводить данную команду.

Далее после сохранения этот файл можно найти тут /var/spool/cron/crontabs/имя_пользователя , поэтому будьте внимательно ведь обычно требуется выполнение от root.

Написание команд

Сразу пример:

* * * * * /usr/local/bin/serve

вот эти звездочки значат определенное время:

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

* - означает КАЖДЫЙ РАЗ

то есть скрипт нужно выполнять

каждую минуту  каждый час  каждый день  каждый месяца  каждый день недели 

 

Еще команды для настройки Cron

Посмотреть файл с настройкой суперюзера: 

crontab -l

 

Удалить все команды:

crontab -r

 

Примеры

Выполни скрипт каждую минуту:

* * * * * /usr/local/bin/serve

 

Выполни в ноль минут каждого часа:

0 * * * * /usr/local/bin/serve

 

 

Выполни в ноль часов в ноль минут каждый день

0 0 * * * /usr/local/bin/serve

 

тоже самое, только выполни 15 числа каждого месяца

0 0 15 * * /usr/local/bin/serve

 

 

 

в нулевой день недели каждого месяца / 0 или 7 - это воскресенье , а 1 - это понедельник

0 0 * * 0 /usr/local/bin/serve

 

Более конкретные примеры

Выполни в 15-30 во вторник:

30 15 * * 2 /usr/local/bin/serve

 

сокращенная запись - sun - то есть в воскресенье - sunday

30 15 * * sun /usr/local/bin/serve

 

Для определенного интервала времени применяют "-"

Например, только с 7-19 часов

0 7-19  * * * /usr/local/bin/serve

 

Запятая указывает, что надо сделать это несколько раз:

в 16-05 и в 16-35

5,35 16  * * * /usr/local/bin/serve

 

 Косая черта для указания интервала, например, 1 раз в каждые 10 минут:

*/10 * * * * /usr/local/bin/serve

 

 

Исключения

А если нам надо отправлять задание на выполнение каждые 30 секунд, либо это делается программно, либо тут через крон можно также:

В стандартном формате cron невозможно задать выполнение задания каждые 30 секунд, так как cron работает с минутными интервалами. Однако, есть несколько способов обойти это ограничение.

▎Способ 1: Использование двух заданий

Можно настроить два задания, которые будут выполняться каждую минуту и запускать вашу задачу через 0 и 30 секунд.

* * * * * /path/to/your/script.sh
* * * * * (sleep 30; /path/to/your/script.sh)


▎Способ 2: Использование sleep в одном задании

Вы можете использовать sleep в одном cron-задании, чтобы запустить задачу дважды в минуту:

* * * * * /path/to/your/script.sh; sleep 30; /path/to/your/script.sh


▎Способ 3: Использование while в скрипте

Если вы хотите, чтобы задание выполнялось в течение длительного времени, вы можете создать скрипт, который будет запускать вашу задачу каждые 30 секунд:

#!/bin/bash

while true; do
    /path/to/your/script.sh
    sleep 30
done


Затем вы можете запустить этот скрипт в фоновом режиме и оставить его работать.

▎Способ 4: Использование системных утилит

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

Выберите способ, который лучше всего соответствует вашим требованиям!

 

Специальные сокращения времени

  • @reboot - при загрузке, только один раз;
  • @yearly, @annually - раз год;
  • @monthly - раз в месяц;
  • @weekly - раз в неделю;
  • @daily, @midnight - каждый день;
  • @hourly - каждый час.

 

 Например:

Запусти команду 1 раз в час:

@hourly /usr/local/bin/serve

 

Как проверить выполнение

Для этого смотрим логи крона, которые находятся тут /var/log/cron  , такой командой:

grep CRON /var/log/syslog

 

или получить последние 10 строк лога: 

tail /var/log/syslog

 

Перенаправление ошибки работы cron на почту

Добавьте для этого строчку:

MAILTO=Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

например

 

Логирование 

Что же касается логирования самого cron. По умолчанию в Ubuntu весь вывод cron логируется в файл /var/log/syslog. Если вы хотите, чтобы он записывался в отдельный файл, то вам необходимо отредактировать файл /etc/rsyslog.d/50-default.conf и раскомментировать в нем строку:

#cron.*                         /var/log/cron.log

А затем перезагрузить сервис rsyslog командой:

systemctl restart rsyslog.service

После чего логи cron будут писаться в отдельный файл /var/log/cron.log. Вы так же можете указать свой собственный файл в конфигурационном файле, где вы только что раскомментировали строку.

 

 

 Конструктор по cron - https://crontab.guru/

 

 А вот тут прям на видео показано как настроить cron на серваке: https://saitsozdanie.ru/forum/index.php?topic=9274.0

и еще планировщики в linux

 

Смотрите также:

Более старые статьи:

Добавить комментарий


Защитный код
Обновить