Я хочу запланировать выполнение задачи на регулярной основе и слышал, что Cron - способ сделать это.
Как добавить задания Cron в Ubuntu?
Поместите скрипт оболочки в одну из этих папок: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
or /etc/cron.weekly
.
Если их недостаточно, можно добавлять более специфические задачи, например, два раза в месяц или каждые 5 минут. Зайдите в терминал и введите:
crontab -e
Откроется ваш личный кронтаб (файл конфигурации 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 - воскресенье.
Вы можете прочитать больше здесь .
Если задание, которое вы хотите запустить, может быть запущено с теми же привилегиями, что и ваш пользователь, я рекомендую использовать пользовательский кронтаб, который можно отредактировать, запустив EDITOR="gedit" crontab -e
(который будет использовать gedit для редактирования кронтаб-файла) или просто crontab -e
(который будет использовать редактор по умолчанию) в терминале.
Если вы хотите запускать что-то каждые 10 минут, например, вы добавляете строку типа этой
*/10 * * * * /usr/bin/somedirectory/somecommand
и сохраняете файл.
Содержимое пользовательского кронтаба можно посмотреть с помощью кронтаба -l
.
Для добавления задания cron, выполняемого от имени root, вы можете редактировать кронтаб root, запустив sudo crontab -e
.
Наиболее гибким способом является использование системного кронтаба /etc/crontab
, который можно редактировать только с привилегиями root. В этом файле каждая команда пользователя должна выполняться так, как указано, поэтому вы можете выполнять ваши команды от имени root (в случае, если вам нужен такой уровень привилегий) или любого другого пользователя в системе.
Например, если вы хотите выполнять что-то каждые 10 минут от имени root, вы добавите строку типа this
*/10 * * * * root /usr/bin/somedirectory/somecommand
(обратите внимание на добавление пользователя в строку)
Содержимое системного crontab-файла можно посмотреть с помощью cat /etc/crontab
.
Больше подробностей на странице: https://help.ubuntu.com/community/CronHowto
Я рекомендую Планировщик заданий KDE ( kde-config-cron
) . Доступ к нему можно получить из Системных настроек в модуле Планировщик заданий .
Он управляет как личными, так и системными Crontab, и простота создания временных границ меня очень удивила (см. скриншот ниже). Я думаю, что эта часть действительно недооценена.
Пример запуска скрипта 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)
Если вы предпочитаете делать это с помощью графического интерфейса, вы можете перейти в Центр программного обеспечения и установить Запланированные задачи (или запустить sudo apt-get install gnome-schedule
). Это обеспечит мощный графический интерфейс для добавления задач cron.
Обратите внимание, что если вы используете этот метод, то задачи по умолчанию будут выполняться от имени вашего собственного пользователя, а не от имени root. Обычно это хорошо.
Планировщик задач KDE не будет работать в обычном Ubuntu. Он работает только в KDE системах типа KUbuntu. Для не KDE систем Вы предпочитаете использовать gnome-schedule
$ sudo apt-get install gnome-schedule
В Dash.
Я хотел настроить задание 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
Учитывая, что у вас есть несколько заданий cron с определенным пользователем, и они не имеют общего расписания. Вы можете просто создать файл в разделе /etc/cron.d/
.
Допустим, имя файла myjobs
, затем просто запишите все свои планировщики в этот файл и выполните следующую команду.
crontab -u <имя_пользователя> /etc/cron.d/myjobs