Как мне настроить работу Cron?

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

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

7 ответов

Решение

Поместите сценарий оболочки в одну из этих папок: /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) Установите kde-config-cron, Доступ к нему из системных настроек в модуле планировщика заданий.

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

введите описание изображения здесь

Я хотел, чтобы задание 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

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

$ sudo apt-get install gnome-schedule

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

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

test_cron.sh файл:

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

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

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

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

sudo nano /etc/cron.allow

root
myname

Путь к сценарию /home/myname/shell/test_cron.sh

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

sudo chown myname /home/myname/shell/test_cron.sh
chmod +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/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

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

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

Другие вопросы по тегам