Cron — планируем задания в Убунту

w256h2561383075021Documentscheduledtasksicon

Очень часто возникает необходимость выполнять нужные задачи в определенный период времени (периодическая очистка диска, запуск будильника, выключение компьютера по расписанию, и т.д.) Для этого в Linux, и в Ubuntu в частности, существует демон-планировщик Cron.

Что такое Cron и Crontab?

Cron это процесс, демон, либо программа, которая активируется один раз в минуту и следит за работой, которую нужно выполнить в данный момент. А вот Crontab это тот самый список заданий, за которым следит Cron.

Для редактирования расписания crontab используйте следующую команду

crontab -e

Если редактор по умолчанию не определен, то вы увидите сообщение об ошибке:

/bin/sh: /bin/vi: No such file or directory
crontab: «/bin/vi» exited with status 127

Для того чтоб определить используемый редактор по умолчанию, выполним

export EDITOR=gedit

В данном случае будет использоваться редактор Gedit. Вместо Gedit можно использовать любой другой редактор, например vim, geany, emacs, nano, mcedit (нужно иметь установленный менеджер mc) и т.д.

Если будете редактировать в консольном редакторе nano, то нужно запомнить несколько комбинаций. После ввода нужной записи или команды надо ее сохранить. Для этого нажмем комбинацию клавиш — crtl+o, далее подтердим нажатием Enter. После всего выйдем из редактора комбинацией — ctrl+x.

Каждое задание пишем с новой строки.

Итак с редактором определились, и снова вводим команду:

crontab -e

Откроется ваш файл crontab.

Синтаксис для планирования задач довольно простой и нужно просто вникнуть в его суть.

* * * * * путь к команде или скрипту

Разберем назначение пяти снежинок.

Первая *: Минуты — интервал значений: 0-59
Вторая *: Часы — интервал значений: 0-23
Третья *: День — интервал значений: 1-31
Четвертая *: Месяц — интервал значений: 1-12
Пятая *: День недели — интервал значений: 0-7 (воскресенье имеет значение — 0 или 7, понедельник — 1, вторник — 2, и т.д.)

Если любая * не изменяется, то значит она работает по умолчанию. Что это значит? Если не изменять первую * (минуты), то значит команда будет срабатывать каждую минуту, если не будет изменена вторая * (часы), то команда будет срабатывать каждый час и т.д. Смысл думаю понятен.

В самом конце впишите следующий текст:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Это не обязательно, но желательно. Данный текст позволит выполнять программы, не прописывая полный путь до этих программ. Но полный путь к вашим скриптам писать все же придется.

Все скрипты, которые будем использовать, должны быть исполняемыми. Это можно сделать так: правой кнопкой по скрипту — Свойства — Права — ставим галочку «Разрешить выполнение файла как программы», либо в Терминале:

chmod +x путь к нужному скрипту.sh

Теперь разберем несколько примеров для закрепления знаний.

Допустим, нужно выполнять скрипт time.sh каждый день в 6:00 вечера. Запись будет выглядеть таким образом:

0 18 * * * /home/user/time.sh

Чтобы задать периодичность срабатывания, программы или скрипта, используется /. К примеру, если нужно выполнять задачу каждые 5 минут по понедельникам, то запись будет следующей:

*/5 * * * 1

Данная запись будет выполнять скрипт time.sh каждые 3 часа по вторникам и пятницам:

0 */3 * * 2,5 /home/user/time.sh

Еще порция примеров:

выполнять задание один раз в час в 15 минут:

15 */1 * * * /home/user/time.sh

выполнять задание каждые 5 часов в 20 минут:

20 */5 * * * /home/user/time.sh

выполнять задание по средам в 6 часов 15 минут вечера:

15 18 * * 3 /home/user/time.sh

выполнять задание 12 февраля в 0 часов 1 минуту каждый год:

1 0 12 2 * /home/user/time.sh

выполнять задание в воскресенье 27 числа в 13 часов 47 минут:

47 13 27 * 0 /home/user/time.sh

выполнять задание каждый месяц 10 числа в 4 часа 10 минут:

10 4 10 * * /home/user/time.sh

выполнять задание каждую минуту:

* * * * * /home/user/time.sh

выполнять задание раз в час по будням:

0 * * * 1-5 /home/user/time.sh

выполнять задание каждый четный час:

* */2 * * * /home/user/time.sh

 

Дополнительные параметры Cron:

 

Пример: если нужно выполнять задание при входе в систему, то команда будет такой вид:

@reboot root /home/user/time.sh

Если нужно выполнить программу, которая имеет графический интерфейс, то после настройки времени-даты нужно вставить:

export DISPLAY=:0

Вся команда будет иметь следующий вид:

58 21 * * * export DISPLAY=:0 && /home/dm/My_Scripts/sleep.sh

Ваш crontab-файл будет находится в /var/spool/cron/crontabs/пользователь.

Посмотреть список всех заданных заданий в cron можно командой:

crontab -l

Чтобы установить задание от другого пользователя нужно выполнить следующую команду:

sudo crontab -e -u user

вместо user пишем нужное имя.

Более подробно о cron можно узнать тут — http://help.ubuntu.ru/wiki/cron или https://ru.wikipedia.org/wiki/Cron

Оказывается, что пользователи Windows, тоже могут использовать всю мощь планировщика задач — cron. Допустим можно запланировать проверку жесткого диска на наличие вирусов, к примеру антивирусом от Dr. Web. Вы можете скачать dr. Web CureIt на сайте download.net. Как оказалось, чтобы запустить cron в «винде», нужно потратить немало времени и повозиться с настройками. Но нам это не грозит. В Убунту все работает «из коробки».

На этом разрешите откланяться и простите за многобукаф.

Также советуем прочесть:


Оригинал статьи http://softhelp.org.ua/?p=6069

0 комментариев

Оставить комментарий