Как мне настроить задание Cron?

Я хочу запланировать выполнение задачи на регулярной основе и слышал, что Cron - это способ сделать это.

Как мне добавить задания Cron в Ubuntu?

Поместите сценарий оболочки в одну из этих папок: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly или /etc/cron.weekly.

Если вам этого недостаточно, вы можете добавить более конкретные задачи, например, два раза в месяц или каждые 5 минут. Перейдите к терминалу и введите:

crontab -e

Это откроет вашу личную crontab (файл конфигурации cron). Первая строка в этом файле объясняет все это! В каждой строке вы можете определить одну команду для запуска и ее расписание, и формат довольно прост, когда вы освоитесь с ним. Структура представляет собой:

minute hour day-of-month month day-of-week command

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

Вы также можете использовать интервалы. Они определяются следующим образом: */20. Этот пример означает каждое 20-е число, поэтому в столбце минут это эквивалентно 0,20,40.

Итак, чтобы запускать команду каждый понедельник в 5:30 пополудни:

30 17 * * 1 /path/to/command

или каждые 15 минут

*/15 * * * * /path/to/command

Обратите внимание, что день недели начинается с 0-6, где 0 - воскресенье.

Вы можете прочитать больше здесь.

Если задание, которое вы хотите запустить, может быть запущено с теми же привилегиями, что и у вашего пользователя, я рекомендую использовать пользовательскую crontab, которую вы можете редактировать, запустив EDITOR="gedit" crontab -e (который будет использовать gedit для редактирования файла crontab) или просто crontab -e (который будет использовать редактор по умолчанию) в терминале.

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

*/10 * * * * /usr/bin/somedirectory/somecommand

и сохраните файл.

Вы можете просмотреть содержимое пользовательской crontab с помощью crontab -l.

Чтобы добавить задание cron, которое выполняется от имени root, вы можете отредактировать crontab root, выполнив sudo crontab -e.

Наиболее гибким способом является использование системного crontab /etc/crontab который вы можете редактировать только с правами суперпользователя. В этом файле пользователь каждой команды должен выполняться так, как указано, поэтому вы можете запускать свои команды от имени root (в случае, если вам нужен такой уровень привилегий) или любого другого пользователя в системе.

Например, если вы хотите запускать что-то каждые 10 минут от имени root, вы бы добавили такую строку

*/10 * * * * root /usr/bin/somedirectory/somecommand

(обратите внимание на добавление пользователя в строку)

Вы можете просмотреть содержимое системного файла crontab с помощью cat /etc/crontab.

Более подробная информация на: https://help.ubuntu.com/community/CronHowto

Если вы предпочитаете делать это с помощью графического интерфейса, вы можете перейти в Центр программного обеспечения и установить Запланированные задачи (или запустить sudo apt-get install gnome-schedule). Это обеспечит мощный графический интерфейс для добавления задач cron.

Обратите внимание, что если вы используете этот метод, задачи по умолчанию будут выполняться от имени вашего собственного пользователя, а не от имени root. Обычно это хорошо.

Я рекомендую Планировщик задач KDE (kde-config-cron) Install kde-config-cron. Получите доступ к нему из Системные настройки в Планировщик задач модуль там.

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

enter image description here

Планировщик задач KDE не будет работать в обычной Ubuntu. Он работает только в системах KDE, таких как KUbuntu. Для системы, отличной от KDE, вы предпочтете использовать gnome-schedule

$ sudo apt-get install gnome-schedule

Приложение выполняет запланированные задачи в тире.

Я хотел настроить задание Cron для выполнения через скрипт bash, чтобы выполнение скрипта добавляло задание cron.

Я понял, что когда вы используете:

crontab -e 

Затем он создает файл:

/var/spool/cron/crontabs/root

Где root - это имя пользователя, выполняющего команду crontab. Итак, основываясь на этом и, по крайней мере, в 14.04, мы можем выполнить следующие команды bash для создания нового задания Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Нам также необходимо установить правильное право собственности на файл:

chown root:root /var/spool/cron/crontabs/root

И установите правильные разрешения:

chmod 600 /var/spool/cron/crontabs/root

Если, когда вы бежите crontab -e в списке уже есть задания Cron, затем вы можете добавить их в список, используя следующую команду:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

Пример запущенного скрипта test_cron.sh с помощью cron каждую минуту в Ubuntu 18.04 с использованием символической ссылки:

test_cron.sh файл:

#!/bin/bashecho "System backuped" >> /media/myname/data/backup/backup_tmp.log

Если вы хотите использовать переменные окружения в своем скрипте, например $USER в paths лучше ввести точный путь, bash не будет знать ваши переменные во время выполнения.

myname это имя пользователя (часть корневой группы, я не уверен, что необходимы привилегии root).

Разрешить пользователям устанавливать задания cron, при необходимости будет создан файл:

sudo nano /etc/cron.allowrootmyname

Путь к скрипту - это /home/myname/shell/test_cron.sh

Я сменил владельца и сделал его исполняемым:

sudo chown myname /home/myname/shell/test_cron.shchmod +x /home/myname/shell/test_cron.sh

Я добавил символическую ссылку:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Зарегистрирован как myname Я добавил новую задачу для выполнения test_cron каждую минуту.

crontab -e*/1 * * * * test_cron

Чтобы проверить, есть ли команда в списке:

crontab -l*/1 * * * * test_cron

Для проверки выполнения

grep -i cron /var/log/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

Учитывая, что у вас есть несколько заданий cron с конкретным пользователем, и они не разделяют одно и то же расписание. Вы можете просто создать файл в разделе /etc/cron.d/Допустим, имя файла myjobs затем просто запишите все ваши планировщики в этот файл, а затем выполните следующую команду.

crontab -u <username> /etc/cron.d/myjobs

1 лайк