Як створити роботу Cron?


534

Я хочу запланувати завдання, щоб регулярно виконувати завдання, і чув, що Cron - це спосіб це зробити.

Як додати завдання Cron в Ubuntu?

Відповіді:


655

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

Більше ви можете прочитати тут .


7
Вони є загальносистемними та працюють з високими привілеями. Я б нічого там не поміщав, якщо немає нагальної потреби в доступі чи дозволі. Як правило, намагайтеся робити речі без можливостей. Тому мені більше подобається ця відповідь: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales

5
@Marcelo Morales, який також запустить дані команди як root! якщо ви, з іншого боку, не використовуєте sudo, тоді ви створите користувацький crontab, і це буде працювати як користувач, який його створив!
LassePoulsen

4
* / 15 * * * * / шлях / до / команда був для мене дуже зручним! Дякую!
Андрій Одендаал

18
Варто зазначити, що ці зміни застосовуються автоматично, вам не потрібно нічого перезавантажувати / перезавантажувати.
Моломбі

6
Ще одна зручна порада - це замість цього */15 * * * * /path/to/commandможна зробити @reboot /path/to/commandдля того, щоб виконати щось під час запуску.
Kenneth Worden

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 Ви можете отримати його тут
М. Becerra

Вимоги до пакету не можуть бути виконані 16.04
Одіссей Ітака

26

Я рекомендую планувальник завдань KDE ( kde-config-cron) Встановіть kde-config-cron . Отримайте доступ до цього з системних налаштувань у модулі Планувальник завдань там.

Він управляє як особистими, так і системними Crontabs, а простота створення часових меж мене дуже здивувала (див. Скріншот нижче). Я думаю, що ця частина справді недооцінена.

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


11

Планувальник завдань KDE не працюватиме в звичайному Ubuntu. Він працює лише в таких системах KDE, як KUbuntu. Для системи, яка не є KDE, ви віддасте перевагу використовувати графік gnome

$ 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.shза кроном щохвилини на Ubuntu 18.04 за допомогою символічного посилання:

test_cron.sh файл:

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

Якщо ви хочете використовувати змінні середовища у своєму скрипті, як $USERу шляхах, то краще ввести точний шлях, bash не буде знати ваші змінні під час виконання.

myname це ім'я користувача (частина кореневої групи, я не впевнений, що кореневі привілеї необхідні).

Дозвольте користувачам встановлювати завдання 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.