Я хочу запланировать выполнение задачи на регулярной основе и слышал, что 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 Task Scheduler не будет работать в обычной Ubuntu. Это работает только в системах KDE, таких как KUbuntu. Для системы без KDE вы предпочитаете использовать gnome-schedule
$ 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
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)