Настройка cron

Пример

Рассмотрим пример создания файла crontab для пользователя user ,домашняя директория /home/user

Задача: запускать каждую минуту файл /home/user/mail, который будет отправлять почту

#содержимое файла mail (файл должен быть с правами на запуск! например -rwxr-xr-x)
#!/bin/bash
mess="test cron"
echo "$mess" |mutt -s "subj" -m application/octet-stream bob@server.ru

1.Создаем временный файл /home/user/test содержимое файла test такое:

SHELL=/bin/bash
MAILTO=user
0-59 * * * * /home/user/mail

2. Запускаем в терминале команду crontab /home/user/test

Все. После этого в каталоге /var/spool/cron будет создан файл «user» примерно с таким содержимым

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/home/user/test installed on Mon Mar 29 02:31:34 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
SHELL=/bin/bash
MAILTO=user
0-59 * * * * /home/user/mail

и файл /home/user/mail будет запускаться демоном cron каждую минуту.

Доступ в каталог /var/spool/cron непривилегированому пользователю закрыт, что бы посмотреть юзером «user»
есть ли у него файл crontab ,достаточно набрать команду crontab -l , если файл существует-будет показано его
содержимое.

Для удаления файла используется команда crontab -r

Для редактирования crontab -e

Для управления файлами crontab пользователем «root» используется синтаксис:

-------------------------
crontab -u user_name file       -создание файла crontab
-------------------------        из файла "file" для
                                  юзера "user_name"

-u означает чей crontab будет обработан, Если опция не задана, то будет обработан crontab того
пользователя, который запустил команду crontab.

-------------------------
crontab -u user_name -l       -просмотр файла crontab
-------------------------       юзера "user_name"

-------------------------
crontab -u user_name -r       -удаление файла crontab
-------------------------       юзера "user_name"

-------------------------
crontab -u user_name -e       -редактирование файла crontab
-------------------------      юзера "user_name" используя
                               редактор, заданный переменной
                               окружения VISUAL или EDITOR

Устранение проблем

Если появляются проблемы во время работы cron, этот краткий список может быть полезным.

Запомните, каждый пакет cron отличается от других, и диапазон возможностей сильно разнится. Проконсультируйтесь с man-страницами для crontab, fcrontab или anacrontab, в зависимости от того, какой cron демон используется.

Cron работает?

Попробуйте следующее:

Код Пример файла crontab для того, чтобы проверить работает ли cron

* * * * * /bin/echo "foobar" >> /file_you_own

Затем проверьте модифицируется ли файл /file_you_own периодически.

Работает ли команда из задачи cron?

То же самое, что и раньше, но также перенаправьте стандартный вывод ошибок:

Код Пример файла crontab для того, чтобы проверить работает ли cron

* * * * * /bin/echo "foobar" >> /file_you_own 2>&1

Использование anacron

Как было упомянуто ранее, anacron используется на системах, не предназначенных для непрерывной работы (подобно большинству настольных компьютеров). Его файл конфигурации по умолчанию, /etc/anacrontab, обычно выглядит так:

Файл

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# format: period delay job-identifier command
1       5       cron.daily      run-parts /etc/cron.daily
7       10      cron.weekly     run-parts /etc/cron.weekly
30      15      cron.monthly    run-parts /etc/cron.monthly

Главным различием между этим файлом crontab и другими является то, что у anacron-а нет фиксированной даты/часа для планирования работы, но только период между каждым запуском. Когда anacron запущен, он проверит содержимое набора файлов в /var/spool/anacron и вычислит, не истекла ли соответствующая запись в файле конфигурации с момента предыдущего запуска. Если это произошло, то команда вызывается снова.

В заключение, важно закомментировать какие-либо совпадающие записи в любом другом cron, установленном на системе, так, как в следующем примере с файлом crontab программы vixie-cron:

Файл

# для vixie-cron
# $Header: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.3 2011/09/20 15:13:51 idl0r Exp $
  
# Глобальные переменные
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
  
# проверять сценарии в cron.hourly, cron.daily, cron.weekly и cron.monthly
59  *  * * *    root    rm -f /var/spool/cron/lastrun/cron.hourly
#9  3  * * *    root    rm -f /var/spool/cron/lastrun/cron.daily
#19 4  * * 6    root    rm -f /var/spool/cron/lastrun/cron.weekly
#29 5  1 * *    root    rm -f /var/spool/cron/lastrun/cron.monthly
#*/10  *  * * * root    test -x /usr/sbin/run-crons && /usr/sbin/run-crons
@hourly         root    test ! -e /var/spool/cron/lastrun/cron.hourly && touch /var/spool/cron/lastrun/cron.hourly && run-parts --report /etc/cron.hourly

Без этого, части daily, weekly и monthly будут выполняться — в разное время — как демоном cron, так и anacron, приводя к возможным повторениям выполнения работ.

Формат и значения полей

Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей.
Пользовательские файлы crontab находятся в каталоге /var/spool/cron

Общий формат команды:

------------------------------------------------
минута час день_месяца месяц день_недели команда
------------------------------------------------

Допустимые значения:
минута        от 0 до 59
час           от 0 до 23
день_месяца   от 1 до 31
месяц         от 1 до 12 (можно три буквы из названия месяца,
                          регистр не имеет значения от jan до dec)
день_недели   от 0 до 6  (0 это воскресенье, 
                          можно писать от sun до sat)

Каждое из полей даты и времени может быть обозначено символом * ,будет соответствовать любому возможному
значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом,
например:

* 5 4-10 0-3 * echo "HELLO"    -печать HELLO в 5:00 на 4,5,6,7,8,9,10
                                дни января, февраля, марта и апреля

пошаговая запись

* */2 * * sat echo "HELLO"     -печать HELLO каждый четный час,
                                каждую субботу

равнозначная предыдущему примеру запись (списком)

* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO"  
                               -печать HELLO каждый четный
                                час, каждую субботу

то же самое с указанием диапазона

* 0-23/2 * * sat echo "HELLO"  -печать HELLO каждый четный
                                час, каждую субботу

59 23 31 dec * echo "Happy new year" -без комментариев :),
                                      поздравит с новым годом

Для отладки задания cron, можно перенаправить результат в файл

Пример:

0-59 * * * * /home/user/mail 2>/tmp/tmp.cron

Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron
и вы всегда сможете узнать причину. В случае перенаправления вывода в файл, письмо, юзеру указаному в
переменной MAILTO отправлено не будет.

Посмотреть информацию о всех командах запускаемых демоном cron можно в каталоге /var/log
называются cron, cron1 и т.д.

В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день

Mar 29 04:03:00 rst CROND: (user) CMD (/home/user/mail) 
Mar 29 04:03:59 rst CROND: (user) CMD (/home/user/mail) 
Mar 29 04:05:00 rst CROND: (user) CMD (/home/user/mail) 
Mar 29 04:06:00 rst CROND: (user) CMD (/home/user/mail) 

В остальных файлах cron1,cron2 находится подобная информация, но более старая чем в cron

Вот практически и все, что требуется знать для использования cron и crontab.

Примеры использования cron

Каждую минуту:

* * * * * /usr/local/bin/check-disk-space.sh

Команда будет выполняться каждую минуту, день и месяц.

По дням:

30 02 10 01,06,12 * /home/$user/bin/checkdrive.sh

Эта команда будет запускать скрипт checkdrive.sh в 02:30 каждое 10 число января, июня и декабря.

Каждые полчаса:

00,30 * * * * /home/$user/backupdata.sh

Только по выходным:

* * * * 6,7 /usr/bin/weekend

Дважды в день:

20 11,16 * * * /usr/sbin/command

Команда будет выполняться каждый день в 11:20 и 16:20.

Каждый час в один конкретный день:

01 * 2 05 * /sbin/system_command

Команда будет запускаться каждый час каждое 2-е мая.

Каждые 10 минут во время пяти рабочих дней (понедельник — пятница):

*/10 * * * 1-5 /usr/local/bin/check-disk-space.sh

Только в рабочее время:

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

Эта команда будет выполняться один раз в день с 9 до 17 часов.

Один раз в году, в полночь 1-го января:

0 0 1 1 * /usr/local/bin/check-disk-space.sh

Дважды в год в 12:00 и в 24:00

0 0,12 1 */6 * /usr/local/bin/check-disk-space.sh

Эта команда будет исполняться дважды в год (каждые 6 месяцев) в 12:00 и в 24:00.

Каждый третий четверг любого заданного месяца в 10:00:

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

Каждый день через 20 минут после каждого четного часа:

20 0-23/2 * * * /usr/local/bin/check-disk-space.sh

Эта команда будет выполняться каждый день через 20 минут после каждого четного часа (0:20, 2:20…22:20).

Как СУММИРОВАТЬ время в Excel

Иногда вам может потребоваться быстро сложить все временные значения в Excel. Добавить несколько значений времени в Excel довольно просто (все, что нужно, — это простая формула SUM).

Но есть несколько вещей, которые вам нужно знать, когда вы добавляете время в Excel, в частности, формат ячейки, который покажет вам результат.

Давайте посмотрим на пример.

Ниже у меня есть список задач вместе со временем, которое займет каждая задача, в столбце B, и я хочу быстро добавить это время и узнать общее время, которое потребуется для всех этих задач.

В ячейке B9 я использовал простую формулу СУММ, чтобы вычислить общее время, которое будут занимать все эти задачи, и оно дает мне значение 18:30 (что означает, что на выполнение потребуется 18 часов 20 минут. все эти задачи)

Пока все хорошо!

Как СУММИРОВАТЬ за 24 часа в Excel

Теперь посмотрим, что происходит, когда я меняю время выполнения задачи 2 с 1 до 10 часов.

В результате теперь отображается 03:20, что означает, что для выполнения всех этих задач потребуется 3 часа 20 минут.

Это неверно (очевидно)

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

И поскольку полученное значение здесь превышает 24 часа, Excel решил преобразовать 24-часовую часть в день, удалив ее из значения, которое отображается пользователю, и отобразить только оставшиеся часы, минуты и секунды.

К счастью, это легко исправить.

Все, что вам нужно сделать, это изменить формат ячейки, чтобы она отображала часы, даже если они превышают 24 часа.

Ниже приведены некоторые форматы, которые вы можете использовать:

Формат ожидаемый результат
[Хм 28:30
: сс 1710:00
d «D» чч: мм 1 Д 04:30
d «D» hh «Min» ss «Sec» 1 д 04 мин 00 сек
d «День» hh «Минута» ss «Секунды» 1 день 04 минута 00 секунды

Вы можете изменить формат, перейдя в диалоговое окно формата ячеек и применив настраиваемый формат, или использовать функцию ТЕКСТ и использовать любой из указанных выше форматов в самой формуле.

Вы можете использовать приведенную ниже формулу ТЕКСТ, чтобы показать время, даже если оно превышает 24 часа:

= ТЕКСТ (СУММ (B2: B7); «: мм: сс»)

или формулу ниже, если вы хотите преобразовать часы, превышающие 24 часа, в дни:

= ТЕКСТ (СУММ (B2: B7); «дд чч: мм: сс»)

Что такое файл Crontab

Crontab (таблица cron) — это текстовый файл, определяющий расписание заданий cron. Есть два типа файлов crontab. Общесистемные файлы crontab и файлы crontab отдельных пользователей.

Файлы crontab пользователей именуются в соответствии с именем пользователя, а их расположение зависит от операционной системы. В дистрибутивах на основе Red Hat, таких как CentOS, файлы crontab хранятся в каталоге , а в Debian и Ubuntu файлы хранятся в каталоге .

Хотя вы можете редактировать пользовательские файлы crontab вручную, рекомендуется использовать команду .

Файл и сценарии в каталоге являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.

В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги , и эти скрипты будут выполняться каждый .

Синтаксис и операторы Crontab

Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда, которую нужно запустить.

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

  • — Оператор звездочка означает любое значение или всегда. Если у вас есть символ звездочки в поле «Час», это означает, что задача будет выполняться каждый час.
  • — Оператор запятая позволяет указать список значений для повторения. Например, если в поле «Час» указано , задача будет выполняться в 1, 3 и 5 утра.
  • — Оператор дефиса позволяет указать диапазон значений. Если в поле «День недели» указано , задача будет выполняться каждый будний день (с понедельника по пятницу).
  • — Оператор косой черты позволяет указать значения, которые будут повторяться через определенный интервал между ними. Например, если в поле «Час» стоит , это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать . Вместо звездочки перед оператором косой черты вы также можете использовать диапазон значений, означает то же, что и .

Общесистемные файлы Crontab

Синтаксис общесистемных файлов crontab немного отличается от пользовательских файлов crontab. Он содержит дополнительное обязательное пользовательское поле, в котором указывается, какой пользователь будет запускать задание cron.

Предопределенные макросы

Есть несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты из пяти столбцов.

  • (или ) — запускать указанную задачу один раз в год в полночь (12:00) 1 января. Эквивалентно .
  • — запускать указанную задачу один раз в месяц в полночь первого числа месяца. Эквивалентно .
  • — запускать указанную задачу один раз в неделю в полночь в воскресенье. Эквивалентно .
  • — запускать указанную задачу один раз в сутки в полночь. Эквивалентно .
  • — запускать указанную задачу один раз в час в начале часа. Эквивалентно .
  • — запускать указанную задачу при старте системы (время загрузки).

Добавление команды в cron

Чтобы добавить задание cron из терминала можно использовать утилиту crontab. Для открытия временного файла с текущими заданиями этого пользователя выполните:

Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:

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

Каждая задача формируется следующим образом:

минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде

Чтобы подставить любое значение используйте звездочку «*». Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить

Обратите внимание, что значение переменной PATH здесь не действует, поэтому путь надо писать полностью либо объявлять свою переменную PATH в начале файла настройки. Давайте сделаем простой скрипт, который будет выводить в лог дату своего запуска и поможет отладить всё это:

Сделайте скрипт исполняемым:

Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:

Или только в нулевую минуту, то есть в начале каждого часа или другими словами запуск cron каждый час:

Можно указать несколько значений через запятую, для того чтобы определить несколько точек запуска. Например, будем запускать скрипт cron каждые 15 минут:

Можно записывать значения через дефис чтобы указывать промежутки точек запуска. Например, для того чтобы запускать скрипт каждую минуту, но только первые 10 минут каждого часа используйте:

Чтобы чтобы настроить интервал выполнения более тонко можно использовать слеш (/) с помощью этого символа и звездочки можно указать шаг с которым будет выполнятся команда. Например, каждые пять минут:

Чтобы запустить cron каждые 10 минут используйте:

А для запуска cron каждые 30 минут:

Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:

А вот запустить cron каждую секунду или раз в 30 секунд не получится. Минимальная единица времени в cron это минута. Но можно создать команду, которая будет запускаться раз в минуту и по 30 секунд спать и затем снова делать:

Это довольно плохой подход и лучше так не делать. Кроме того, для экономии времени при работе с cron можно использовать специальные слова-маркеры времени. Вот они:

  • @reboot — при перезагрузке;
  • @yearly, @annually — раз в год (0 0 1 1 *);
  • @monthly — раз в месяц (0 0 1 * *);
  • @weekly — раз в неделю (0 0 * * 0);
  • @daily, @midnight — раз в день в полночь (0 0 * * *);
  • @hourly — раз в час (0 * * * *).

Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:

Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly,… чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.

Управление выводом задачи cron

Поскольку задачи cron выполняются в фоновом режиме, не всегда очевидно, что они были запущены успешно. Теперь, когда вы знаете, как использовать команду и как запланировать задачу cron, вы можете начать экспериментировать с различными способами перенаправления результатов выполнения задач cron, чтобы помочь вам отследить их успешное выполнение.

Если у вас есть агент передачи почты, например, Sendmail, который установлен и настроен на сервере, вы можете отправить результат выполнения задачи cron на электронный адрес, связанный с вашим профилем пользователя Linux. Также вы можете вручную задать адрес электронной почты, указав параметр вверху crontab.

Например, вы можете добавить следующие строки в файл crontab. К ним относятся оператор , за которым следует пример адреса электронной почты, директива , которая указывает оболочку для запуска (в данном примере ), директива , указывающая путь поиска бинарного файла cron, и единственная задача cron:

Эта конкретная задача будет возвращать «Run this command every minute», а этот вывод будет отправляться каждую минуту на адрес электронной почты, заданный директивой .

Также вы можете перенаправить вывод задачи cron в файл журнала или в пустую директорию, чтобы не получать электронное сообщение с выводом.

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

Скажем, что мы хотим использовать cron для запуска скрипта, но скрипт при этом должен выполняться в фоновом режиме. Для этого вы можете перенаправить вывод скрипта в пустую директорию, например , которая немедленно удаляет все данные, добавляемые в нее. Например, следующая команда cron выполняет скрипт PHP и запускает его в фоновом режиме:

Эта задача cron также перенаправляет — представляемую как — в стандартный вывод (). Поскольку стандартный вывод уже перенаправляется в директорию , это позволяет запускать скрипт без лишнего шума. Даже если в crontab содержится оператор , вывод команды не будет отправляться на заданный адрес электронной почты.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: