3 способа запланировать задачу/задание без Cron в Linux
В мире Linux так много всего интересного и интересного, что чем больше мы в него вникаем, тем больше находим разных вещей.
В наших попытках предоставить вам те небольшие хитрости и советы, которые отличают вас от других, мы придумали несколько альтернативных способов запланировать задание без использования утилиты cron в Linux.
Планирование задания/команды в Linux — это аббревиатура cron. Всякий раз, когда нам нужно запланировать задание, мы вызываем команду cron, но знаете ли вы, что мы можем запланировать задание на более позднее время без кукурузы? Вы можете сделать это, используя следующие распространенные подходы.
1. Планирование заданий в Linux с использованием Sleep Loop
Запускайте команду (скажем, date) каждые 5 секунд и записывайте результат в файл (скажем, date.txt). Чтобы реализовать этот сценарий, нам нужно запустить приведенный ниже однострочный сценарий непосредственно в командной строке.
while true; do date >> date.txt ; sleep 5 ; done &
Анатомия приведенного выше однострочного сценария:
- while true — попросите скрипт запуститься, пока условие истинно. Это действует как цикл, который заставляет команду выполняться снова и снова или, скажем, в цикле.
- do – выполнить следующее, т. е. выполнить команду или набор команд, которые находятся перед оператором do.
- date >> date.txt – здесь вывод команды date записывается в файл date.txt. Также обратите внимание, что мы использовали
>>
, а не>
. >>
гарантирует, что файл (date.txt) не будет перезаписываться при каждом выполнении сценария. Он просто добавляет изменения. Тогда как>
перезаписывает файл снова и снова.- sleep 5 – он просит оболочку сохранить разницу во времени в 5 секунд перед повторным выполнением. Обратите внимание, что время здесь всегда измеряется в секундах. Скажем, если вы хотите выполнять команду каждые 6 минут, вам следует использовать (6*60) 360 в последовательности сна.
- done — отмечает конец цикла while.
&
— поместите весь процесс в фоновый цикл.
Точно так же мы можем выполнить любой скрипт таким же образом. Вот команда для вызова сценария через определенный интервал (скажем, 100 секунд), имя сценария — script_name.sh
.
Также стоит отметить, что приведенный выше сценарий следует запускать в каталоге, в котором находится вызываемый сценарий, в противном случае вам необходимо указать полный путь (/home/$USER/…/script_name.sh
). .
Синтаксис вызова скрипта через описанный выше интервал:
while true; do /bin/sh script_name.sh ; sleep 100 ; done &
Примечание. Приведенная выше однострочная строка не является заменой Cron, поскольку утилита Cron поддерживает множество опций по сравнению с , и он очень гибкий и настраиваемый.
Однако, если мы хотим запустить определенные тестовые примеры или тесты ввода-вывода, то для этой цели подойдет приведенная выше единственная команда.
2. Планируйте задачи с помощью системных таймеров
В большинстве современных дистрибутивов Linux Systemd является системой init по умолчанию и имеет функцию таймера, позволяющую планировать задачи.
Сначала создайте новый файл модуля таймера systemd с расширением .timer
, как показано.
sudo nano /etc/systemd/system/myjob.timer
Добавьте следующее содержимое в файл myjob.timer
:
[Unit]
Description=My Job Timer
[Timer]
OnCalendar=*-*-* 00:00:00
Replace the OnCalendar value with the desired schedule
[Install]
WantedBy=timers.target
Поле OnCalendar в модуле таймера systemd позволяет указать расписание вашего задания в определенном формате.
- Ежегодно: ежегодно или ежегодно.
- Ежемесячно: ежемесячно.
- Еженедельно: еженедельно.
- Ежедневно: ежедневно или в полночь.
- Почасово: ежечасно
- Минуты: вы можете указать конкретную минуту, используя формат
*:MM
(например,*:15
для каждых 15 минут) или определенный диапазон. используя MM-MM (например, 10–30 для каждой минуты от 10 до 30).
Вот несколько примеров, иллюстрирующих формат:
## Run every day at 3:00 AM ##
OnCalendar=*-*-* 03:00:00
## Run every Monday and Friday at 10:00 AM ##
OnCalendar=Mon,Fri *-*-* 10:00:00
## Run every 30 minutes: ##
OnCalendar=*-*-* *:0/30:00
Затем создайте соответствующий файл модуля службы с расширением .service
в том же каталоге:
sudo nano /etc/systemd/system/myjob.service
Добавьте следующее содержимое в файл myjob.service
:
[Unit]
Description=My Job
[Service]
ExecStart=/path/to/your/job.sh
Replace "/path/to/your/job.sh" with the actual command or script to execute
[Install]
WantedBy=multi-user.target
Включите и запустите таймер:
sudo systemctl enable myjob.timer
sudo systemctl start myjob.timer
Это запланирует выполнение вашего задания в соответствии с указанным таймером.
3. Планирование задач с помощью Anacron
Anacron — это планировщик заданий на основе времени, который позволяет периодически планировать задания в системах, которые не всегда включены. Он предназначен для систем, у которых нет регулярного доступа к cron. Если в вашей системе установлен anacron, вы можете использовать его для планирования своей работы.
Если он не установлен, вы можете установить его с помощью менеджера пакетов.
sudo apt install anacron [On Debian, Ubuntu and Mint]
sudo yum install anacron [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/anacron [On Gentoo Linux]
sudo apk add anacron [On Alpine Linux]
sudo pacman -S anacron [On Arch Linux]
sudo zypper install anacron [On OpenSUSE]
Создайте новый файл конфигурации (myjob.sh) для своего задания в каталоге /etc/anacrontab.d/.
sudo nano /etc/anacrontab.d/myjob.sh
В файле конфигурации укажите детали вашего задания.
Run myjob.sh every day with a delay of 5 minutes
1 5 myjob /path/to/myjob.sh
Поля в файле конфигурации имеют следующее значение:
- Первое поле — это период времени, в который задание должно выполняться @daily, @weekly, @monthly или @yearly. .
- Второе поле — время в минутах задержки выполнения задания после запуска системы.
- Третье поле — это имя задания, которое будет использоваться для создания файлов журналов.
- Четвертое поле — это команда или сценарий, который необходимо выполнить.
Теперь Anacron автоматически выполнит ваше задание в соответствии с заданным расписанием.
На данный момент это все. Если вы знаете какие-либо хаки или приемы для Linux, вы можете поделиться ими с нами через раздел комментариев и не забудьте поделиться этой статьей со своими друзьями.