How to use cron in linux

3: Управление файлами crontab

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

Мы уже говорили, что crontab – это специальный файл, который содержит расписание задач для cron. Однако файл crontab не следует редактировать вручную. Вместо этого рекомендуется использовать команду crontab. Она будет редактировать файл crontab вашего пользователя, не требуя повышенных привилегий с помощью sudo. Команда crontab также выявляет синтаксические ошибки в файле (редактируя файл вручную, вы можете их не заметить).

Чтобы отредактировать файл crontab, введите:

Эта команда откроет crontab в текстовом редакторе по умолчанию.

Примечание: На новых серверах CentOS 8 команда crontab -e по умолчанию открывает crontab с помощью vi. Редактор vi – очень мощный и гибкий текстовый редактор, но пользователям, которым не хватает опыта работы с ним, он может показаться немного неудобным.

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

Установить nano вы можете с помощью dnf:

При появлении запроса нажмите y, а затем Enter, чтобы подтвердить установку.

Чтобы установить nano в качестве визуального редактора по умолчанию для вашего пользователя, откройте файл .bash_profile для редактирования. Теперь, когда вы установили nano, вы можете открыть файл с его помощью:

В конец файла добавьте следующую строку:

Она задает переменной среды VISUAL значение nano. VISUAL – это переменная среды Unix, которую многие программы, включая crontab, используют для редактирования файла. Добавив эту строку, сохраните и закройте файл, нажав Ctrl + X, Y, а затем Enter.

Затем перезагрузите .bash_profile, чтобы оболочка применила новое значение:

В редакторе вы можете ввести свое расписание задач. Каждая задача записывается в отдельную строку. Если вы пока что не хотите ничего добавлять в файл, можете сохранить и закрыть crontab. Если вы открыли файл crontab с помощью vi, текстового редактора CentOS 8 по умолчанию, вы можете закрыть его, нажав ESC, чтобы выйти в режим команд vi, а затем ввести x и нажать Enter.

В системах Linux в каталоге /etc/ хранится еще один crontab. Это общесистемный файл, в котором есть дополнительное поле, оно определяет пользователя, который должен выполнять задачу cron. В этом мануале рассматриваются только пользовательские файлы crontab. Если вы хотите отредактировать общесистемный crontab, вы можете сделать это с помощью следующей команды:

Если вы хотите просмотреть содержимое вашего crontab, но не редактировать его, вы можете использовать следующую команду:

Вы можете очистить свой crontab с помощью следующей команды:

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

При появлении запроса вы должны ввести y, чтобы удалить содержимое crontab, или n, чтобы отменить действие.

2: Как работает cron

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

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

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

Поле Допустимые значения
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12 или JAN-DEC
День недели 0-6 или SUN-SAT

В целом записи в crontab структурированы так:

Вот рабочий пример выражения cron. Оно запускает команду curl http://www.google.com каждый вторник в 17:30.

Также cron предоставляет несколько специальных символов, которые можно включить в ту часть выражения cron, которая определяет время. Это позволяет упростить планирование:

  • *: подстановочная переменная, которая значит «все». Следовательно, задача, запланированная с помощью * * * * * …, будет запускаться каждую минуту каждого часа каждого дня каждого месяца.
  • ,: символы запятой разделяют значения календаря и формируют список. Если вы хотите, чтобы задача выполнялась в начале и середине каждого часа, вы можете настроить такое поведение в рамках одного выражения с помощью следующего синтаксиса: например, 0 * * * * … и 30 * * * * … можно объединить в выражение 0,30 * * * * ….
  • -: дефис задает диапазон значений в поле времени. Вместо 30 отдельных выражений для одной команды, которую вы хотите запускать в течение первых 30 минут каждого часа (0 * * * * …, 1 * * * * …, 2 * * * * .. и т. д.), вы можете просто использовать одно выражение 0-29 * * * * ….
  • /: слеш вместе со звездочкой определяет шаг. Например, чтобы команда запускалась каждые  три часа, вы можете запланировать ее следующим образом: 0 * / 3 * * * …. При этом не придется создавать восемь отдельных задач cron (, 0 0 * * * …, 0 3 * * * …, 0 6 * * * … и так далее).

Примечание: Значения шага нельзя выражать произвольно. Вы можете использовать только целые числа, на которые можно разделить заданный диапазон без остатка. Например, в поле «часы» вы можете использовать слеш только с цифрами 1, 2, 3, 4, 6, 8 или 12 (на них можно разделить 24 часа без остатка).

Вот еще несколько примеров планирования времени в cron:

  • * * * * * — команда будет запускаться каждую минуту.
  • 12 * * * * — команда запускается на 12 минуте каждого часа.
  • 0,15,30,45 * * * * — команда запускается каждые 15 минут.
  • */15 * * * * — Run the command every 15 minutes.
  • 0 4 * * * — команда запускается каждый день в 4:00 утра.
  • 0 4 * * 2-4 — команда будет запускаться каждый вторник, среду и четверг в 4:00 утра.
  • 20,40 */8 * 7-12 * — команда запускается на 20-й и 40-й минуте каждого 8-го часа каждый день последних 6 месяцев года.

Если вам сложно разобраться с этим вопросом или нужна помощь в планировании времени для ваших задач cron, обратитесь к Cronitor. Он предоставляет удобный редактор выражений cron по имени Crontab Guru, который вы можете использовать для проверки своих записей.

Syntax

crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]

Options

file Load the crontab data from the specified file. If file is a dash (««), the crontab data is read from standard input.
-u user Specifies the user whose crontab is to be viewed or modified. If this option is not given, crontab opens the crontab of the user who ran crontab. Note: using su to switch users can confuse crontab, so if you are running it inside of su, always use the -u option to avoid ambiguity.
-l Display the current crontab.
-r Remove the current crontab.
-e Edit the current crontab, using the editor specified in the environment variable VISUAL or EDITOR.
-i Same as -r, but gives the user a yes/no confirmation prompt before removing the crontab.
-s SELinux only: appends the current SELinux security context string as an MLS_LEVEL setting to the crontab file before editing or replacement occurs. See your SELinux documentation for detailed information.

Выполняйте задачи в определенное время

Бывает необходимо выполнить задачу лишь раз, а не делать это регулярно. С этой целью пользуйтесь командой . Задания, которые должны быть выполнены, читаются из файла, указанного с флагом , или из стандартного ввода stdin, если не используется. Флаг отправляет письмо пользователю, даже если у команды нет стандартного вывода. Флаг
показывает время, когда задание будет запущено перед чтением задания. Время также показывается в выводе.

В листинге 5 приведен пример работы сценария , который использовался ранее. В листинге 6 показан вывод, который отправляется пользователю после запуска задания

Обратите внимание, что он несколько более компактный, чем тот, что отсылается функцией cron

Листинг 5. Использование команды at
Листинг 6. Вывод задачи, запущенной командой at
From ian@lyrebird.raleigh.ibm.com  Sat Jul  7 10:25:00 2007
Date: Sat, 7 Jul 2007 10:25:00 -0400
From: Ian Shields <ian@lyrebird.raleigh.ibm.com>
Subject: Output from your job        5
To: ian@lyrebird.raleigh.ibm.com

It is now 10:25:00 on Saturday

Указание времени может быть достаточно сложным. В листинге 7 приведено несколько примеров. Более подробную информауию можно найти на страницах справочника man, посвященных команде , в файле /usr/share/doc/at/timespec или в файле типа /usr/share/doc/at-3.1.10/timespec, где 3.1.10 соответствует версии пакета .

Листинг 7. Значения времени в команде at
$ at -f mycrontest.sh  10pm tomorrow
job 14 at Sun Jul  8 22:00:00 2007
$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007
$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007
$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

Для команды есть также опция
(queue — очередность). Увеличение очередности увеличивает значение для задания.

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

Ограничение доступа

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

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

Сначала мы закрываем доступ для всех пользователей, добавив в файл . Затем, добавив имя пользователя в файл , мы предоставим пользователю ishmael доступ к выполнению задач cron.

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

Однако, если существует, и user добавлен в него, но не указан в файле , вы получите следующую ошибку после запуска предыдущей команды:

По умолчанию большинство демонов cron полагает, что все пользователи имеют доступ к cron, если только не существует или .

Examples

Running crontab

crontab -e

Edit your crontab.

crontab -l

Display («list») the contents of your crontab.

crontab -r

Remove your crontab, effectively un-scheduling all crontab jobs.

sudo crontab -u charles -e

Edit the crontab of the user named charles. The -u option requires administrator privileges, so the command is executed using sudo.

sudo crontab -l -u jeff

View the crontab of user jeff.

sudo crontab -r -u sandy

Remove the crontab of user sandy.

Crontab entries

The following are examples of entries which could be included in a crontab.

Run the shell script /home/melissa/backup.sh on January 2 at 6:15 A.M:

15 6 2 1 * /home/melissa/backup.sh

Days and months can be listed by name (Monday) or abbreviation (Jan). Zeroes at the beginning of a number are valid, which can help you make multiple entries line up visually.

For instance, the next example runs the same script as above, at 12:01 A.M., every Monday in January:

01 00 * Jan Monday /home/melissa/backup.sh

Run /home/carl/hourly-archive.sh every hour, on the hour, from 9 A.M. (09:00) through 6 P.M. (18:00), every day:

00 09-18 * * * /home/carl/hourly-archive.sh

Same as the above, but run it every twenty minutes:

*/20 09-18 * * * /home/carl/hourly-archive.sh

Run /home/wendy/script.sh every Monday, at 9 A.M. and 6 P.M:

0 9,18 * * Mon /home/wendy/script.sh

Run /usr/local/bin/backup at 10:30 P.M., every weekday:

30 22 * * Mon,Tue,Wed,Thu,Fri /usr/local/bin/backup

anacron

anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:

* * * выполняемая_команда
- - -
| | |
| | --------- идентификатор
| ----------- задержка
------------- период

Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания — любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.

На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:

В Linux есть такой чудо демон — cron. Демон cron при загрузке, а так же — после загрузки каждую минуту «шерстит» файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в «просматриваемом» файле и запускает указанную команду, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.

Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.

Configuration

Permitting users to run cron jobs

Cron jobs can be allowed or disallowed for individual users, as defined in the files /etc/cron.allow and /etc/cron.deny. If cron.allow exists, a user must be listed there to be allowed to use a given command. If the cron.allow file does not exist but the cron.deny file does, then a user must not be listed there to use a given command. If neither of these files exists, only the superuser will be allowed to use a given command.

Cron permissions can also be defined using PAM (pluggable authentication module) authentication to set up users who may or may not use crontab and system cron jobs. PAM configuration is located in /etc/cron.d/.

Configuring the temp directory

The temporary directory for cron jobs can be set in environment variables listed below. If these variables are not defined, the default temporary directory /tmp is used.

Configuration files

File Description
/etc/cron.allow If this file exists, users must be listed in this file to be able to run cron jobs.
/etc/cron.deny If this file exists, users must not be listed in this file to be able to run cron jobs.

If neither configuration file exists, only the superuser may run cron jobs.

Setting up cron jobs in Unix, Solaris & Linux

cron is a Unix, solaris, Linux utility that allows tasks to be automatically run in the background at regular intervals by the cron daemon. 

cron meaning – There is no definitive explanation but most accepted answers is reportedly from Ken Thompson ( author of unix cron ), name cron comes from chron ,the Greek prefix for ‘time.’.What is cron ? – Cron is a daemon which runs at the times of system boot from /etc/init.d scripts. If needed it can be stopped/started/restart using init script or with command service crond start in Linux systems.

This document covers following aspects of Unix, Linux cron jobs to help you understand and implement cronjobs successfully

  1. What is crontab?
  2. What is a cron job or cron schedule?
  3. Crontab Restrictions
  4. Crontab Commands
  5. Crontab file – syntax
  6. Crontab Example
  7. Crontab Environment
  8. Disable Email
  9. Generate log file for crontab activity
  10. Crontab file location

Составление расписания заданий

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

Формат записей файла crontab

Часть time-date (время-дата) состоит из пяти числовых полей, разделенных пробелами и определяющих время запуска задания:

Для удобства заполнения указанных полей введены следующие правила:

  • Можно указывать значения в виде численных интервалов. К примеру, интервал 1-3 в поле часов означает 1.00, 2.00 и 3.00 пополуночи, 2-4 в поле дня недели — вторник, среду или четверг.
  • Интервалы можно задавать с шагом больше единицы. Например, чтобы указать каждый второй час, начиная с полуночи, следует установить интервал 0-23 с шагом 2 через косую черту: 0-23/2
  • Звездочка (*) указывает полный интервал значений поля — от минимального до максимального. Например, в поле дня месяца звездочка означает интервал 0-31, в поле дня недели — 0-7
  • День недели или месяц можно указать первыми тремя буквами его (английского) названия

Примеры времени-даты

Несколько примеров заполнения полей времени-даты:

0 1 * * *
Запуск задания ежедневно в 1.00 пополуночи
30 14 * * 0
Запуск задания по воскресеньям в 2.30 пополудни
0 23-7/2,8 * * *
Запуск задания каждые 2 часа с 23.00 до 7.00 и в 8.00
0 12 * 1 mоn
Запуск задания в полдень каждого понедельника января каждого года
0 12 2 feb *
Запуск задания в полдень второго февраля каждого года

Поле command

Поле command (команда) отделено от полей времени-даты одним или несколькими пробелами и простирается до конца строки. Команды обрабатываются оболочкой /bin/sh .

Например, следующая запись в файле crontab предусматривает ежедневный запуск программы /usr/sbin/backup в 1.00 пополуночи:

0 1 * * * /usr/sbin/backup

Некоторым командам (например, mail) требуется ввод информации с устройства стандартного ввода. Это указывается при помощи знака процента (%). Первый такой знак обозначает начало стандартного ввода, каждый последующий — смену строки.

Crontab в панели управления Timeweb

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

Интерфейс Crontab в панели управления Timeweb дружелюбен и интуитивно понятен: даже начинающие пользователи, до этого не имевшие опыта работы с cron, легко разберутся в том, как создавать задачи. Создав задачу, вы сможете в автоматическом режиме делать бэкапы, рассылки, чистить кэш и выполнять другие типовые действия.

Crontab в панели управления Timeweb поможет любому пользователю автоматизировать свои задачи и достичь нужный ему результат.

После основной информации я расскажу о нюансах, которые важно учитывать при работе с cron. В разделе Crontab создаются новые задачи

Для этого потребуется заполнить поля:

В разделе Crontab создаются новые задачи. Для этого потребуется заполнить поля:

Название. Это имя нашей задачи.

Тип файла и путь до файла. В зависимости от того, на каком языке написан сценарий, выбираем тип файла и путь до него. Если в задаче запускается скрипт, требующий переменные веб-сервера, запуск напрямую через php-интерпретатор приводит к ошибкам. Поэтому в случае, когда Вы используете скрипт, работающий при запуске через адресную строку браузера, необходимо выбирать тип файла «HTTP-запрос» и указывать URL для запроса аналогично тому, как он указывается в адресной строке «ваш_сайт/путь/до/скрипта/script.php?параметр1=значение1&параметр2=значение2».

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

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

Conclusion

If all goes well, congratulations. You have mastered the syntax of this most arcane of schedulers and set a schedule
for your tasks.

Copyright 2007-2017 by Christopher Heng. All rights reserved.
Get more free tips and articles like this,
on web design, promotion, revenue and scripting, from https://www.thesitewizard.com/.

You are here:
Top >
General Webmaster Articles and Tutorials >
How to Create a Cron Job (Scheduled Task) for Your Website or Blog

Other articles on: Drupal

thesitewizard News Feed (RSS Site Feed) 

Do you find this article useful? You can learn of new articles and scripts that are published on
thesitewizard.com
by subscribing to the RSS feed. Simply point your RSS feed reader or a browser that supports RSS feeds at
https://www.thesitewizard.com/thesitewizard.xml.
You can read more about how to subscribe to
RSS site feeds from my RSS FAQ.

Related Pages

  • How to Password Protect a Directory on Your Website
  • How to Customize Your 404 File Not Found Page
  • 6 Things to Note Before Changing Your Site Design
  • The Pros and Cons of Using an Online Blog Software or a Content Management System (CMS)
  • How to Accept Credit Cards on Your Website
  • Server Side Includes (SSI) Primer
  • How to Register Your Own Domain Name
  • Which Web Host Do You Recommend? (FAQ)

New Articles

  • How to Change the Colour (Color) of Links on a Website with Expression Web
  • How to Change the Colour (Color) of Links on a Web Page with BlueGriffon
  • Why Can’t I Make Up Any Domain I Want? Is There a Way to Do Away with a Registrar Altogether?
  • How to Prevent Two or More Words from Being Split into Separate Lines (HTML/CSS)
  • How to Add an Audio or Music File to a Web Page with BlueGriffon
  • How to Rotate an Image on a Website When Viewed on a Mobile Phone (CSS)
  • Can I Change My Website’s Address to HTTPS Without Getting an SSL Certificate?
  • What’s the Difference Between a Domain Name Registrar and a Web Host?
  • How to Make a Mobile-Friendly Website: Responsive Design in CSS
  • What’s the Difference Between a Content Management System (CMS), a Blog, a Web Editor and an Online Site Builder?

Popular Articles

  • How to Create a Blog
  • How to Make / Create a Website: The Beginner’s A-Z Guide
  • Tips on Choosing a Good Domain Name
  • Expression Web Tutorial: How to Design a Website with Microsoft Expression Web
  • Dreamweaver Tutorial: How to Design a Website with Dreamweaver CS6
  • BlueGriffon Tutorial: How to Design a Website with BlueGriffon 3
  • How to Design and Publish Your Website with KompoZer (free WYSIWYG web editor)
  • Free Feedback/Contact Form Wizard

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

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *