Я хочу запланувати завдання, щоб регулярно виконувати завдання, і чув, що Cron - це спосіб це зробити.
Як додати завдання Cron в Ubuntu?
Я хочу запланувати завдання, щоб регулярно виконувати завдання, і чув, що 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 - неділя.
Більше ви можете прочитати тут .
*/15 * * * * /path/to/command
можна зробити @reboot /path/to/command
для того, щоб виконати щось під час запуску.
Якщо завдання, яке ви хочете запустити, можна виконати з тими ж привілеями, що і ваш користувач, я рекомендую використовувати 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
Якщо ви віддаєте перевагу робити це за допомогою графічного інтерфейсу, ви можете зайти в Центр програмного забезпечення та встановити заплановані завдання (або запустити sudo apt-get install gnome-schedule
). Це забезпечить потужний графічний інтерфейс для додавання задач cron.
Зауважте, що якщо ви використовуєте цей метод, завдання за замовчуванням виконуватимуться як власний користувач, а не як root. Зазвичай це гарна річ.
Я рекомендую планувальник завдань KDE ( kde-config-cron
) . Отримайте доступ до цього з системних налаштувань у модулі Планувальник завдань там.
Він управляє як особистими, так і системними Crontabs, а простота створення часових меж мене дуже здивувала (див. Скріншот нижче). Я думаю, що ця частина справді недооцінена.
Планувальник завдань KDE не працюватиме в звичайному Ubuntu. Він працює лише в таких системах KDE, як KUbuntu. Для системи, яка не є KDE, ви віддасте перевагу використовувати графік gnome
$ sudo apt-get install gnome-schedule
Додаток - це заплановані завдання на тире.
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
Я хотів встановити завдання 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
за кроном щохвилини на 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)