Cron в Ubuntu
- Подробности
- Категория: Сисадмин
- Просмотров: 681
Если нужно что-то сделать и спланировать по расписанию на сервере...
то пригодится 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
Смотрите также: