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

534

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

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

Габриэль Соломон
источник

Ответы:

656

Поместите скрипт в одну из этих папок: /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 - воскресенье.

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

LassePoulsen
источник
7
Они являются общесистемными и работают с высокими привилегиями. Я бы ничего не положил туда, если бы не острая необходимость в доступе или разрешении. Как правило, старайтесь делать вещи без возможностей. Поэтому мне больше нравится этот ответ: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Марсело Моралес
5
@Marcelo Morales, который также будет запускать данные команды от имени root! с другой стороны, если вы не используете sudo, вы создадите пользовательский crontab, и он будет запущен как пользователь, который его создал!
LassePoulsen
4
* / 15 * * * * / путь / к / команда была очень удобной для меня! Спасибо!
Эндрю Одендаал
18
Стоит отметить, что эти изменения применяются автоматически, вам не нужно ничего перезагружать / перезагружать.
Моломби
6
Еще один полезный совет: вместо этого */15 * * * * /path/to/commandвы можете @reboot /path/to/commandвыполнить что-либо при запуске.
Кеннет Уорден
102

Если задание, которое вы хотите запустить, может быть запущено с теми же привилегиями, что и ваш пользователь, я рекомендую использовать пользовательский 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. В этом файле пользователь должен запускать каждую команду, как указано, так что вы можете запускать команды как root (в случае, если вам нужен этот уровень привилегий) или любой другой пользователь в системе.

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

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

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

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

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

Ли Ло
источник
1
Вот приятный интерактивный манипулятор cron, который даст вам английский для времени crontab.guru
CTS_AE
52

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

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

Хавьер Ривера
источник
3
недоступно для 16.04, по-видимому, bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash
@TankorSmash Вы можете получить это здесь
М. Бесерра
Требования к пакету не могут быть выполнены 16.04
Одиссей Итака
26

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

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

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

gertvdijk
источник
11

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

$ sudo apt-get install gnome-schedule

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

Антонио
источник
Не найден для Ubuntu 16.04
SaidbakR
Пожалуйста, посмотрите на I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Существует пакет для загрузки @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Просто выступите$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Антонио
10

Я хотел, чтобы задание 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
Крейг ван Тондер
источник
2

Пример запуска скрипта test_cron.shcron каждую минуту в 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)
Александр
источник