Mailto root

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

Cron подразумевает, что система работает непрерывно. Если система не была включена в момент, на который была назначено задание, оно не будет выполнено. За информацией о назначении одноразовых заданий, обратитесь к разделу 35.2 Задания at и batch.

Для использования службы cron, необходимо, чтобы был установлен RPM-пакет vixie-cron и работала служба crond. Чтобы определить, установлени ли этот пакет, выполните команду rpm -q vixie-cron. Чтобы определить, работает ли служба, воспользуйтесь командой /sbin/service crond status.

Содержание
  1. Начало работы с Cron Jobs
  2. Crontab Logging
  3. Crontab Mail Silence
  4. Crontab Log and Silence Mail
  5. Crontab Mail
  6. How to Read Local Mail in Linux
  7. Edit /etc/aliases
  8. run-parts
  9. record the memory usage of the system every monday
  10. at 3:30AM in the file /tmp/meminfo
  11. Run Custom SCR īpt the first day of every month at 4:10AM
  12. Every morning at six o ‘clock
  13. Every two hours
  14. Every two hours between 11:00 p.m. and 8:00 a.m., 8:00 a.m
  15. On the 4th of the month and every Monday through Wednesday at 11 a.m
  16. At 4 o ‘clock in the morning on January 1st
  17. run-parts
  18. You may like:
  19. Запуск и остановка службы
  20. Управление доступом к cron
  21. Anacron
  22. Столкновение между Cron и Anacron
  23. Запуск и остановка службы
  24. Cron и PHP
  25. Как Cron интерпретирует файлы Crontab
  26. Разрешения Cron
  27. Настройка заданий cron
  28. Перекрытия задач
  29. Использование Flock
  30. Использование механизма блокировки в скриптах
  31. Файлы Crontab
  32. Анатомия записи Crontab
  33. Редактирование Crontab других пользователей
  34. Стандартные и нестандартные значения Crontab
  35. Диапазоны
  36. Списки
  37. Шаги
  38. Имена
  39. Предопределенные определения
  40. Несколько команд в одном задании Cron
  41. Переменные среды
  42. Разные часовые пояса
  43. Быстрое устранение неполадок
  44. Абсолютный путь к командам
  45. Убедитесь, что  cron запущен
  46. Проверка /etc/cron.allowи /etc/cron.deny файлы
  47. Разрешение на выполнение
  48. Новый символ строки
  49. Терминология Cron Job
  50. Завершение
  51. Перенаправление вывода
  52. Отправьте вывод по электронной почте

Начало работы с Cron Jobs

Если мы заглянем внутрь /etc каталога, то увидим такие каталоги, как cron.hourlycron.dailycron.weeklyи cron.monthly, каждый из которых соответствует определенной частоте выполнения.

Одним из способов планирования наших задач является размещение наших сценариев в соответствующем каталоге. Например, для db_backup.php ежедневного запуска мы поместили его внутрь cron.daily. Если папка для данной частоты отсутствует, нам нужно будет сначала создать ее.

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

Это самый простой способ запланировать задачу. Однако, если нам нужна большая гибкость, мы должны использовать Crontab.

Вам нужно регулярно запускать скрипт, но вы не хотите запускать его вручную? Или, может быть, вам нужно выполнить команду в определенное время или интервал, но вы не хотите, чтобы процесс монополизировал ваш процессор или память. В любом случае cron jobs идеально подходят для этой задачи. Давайте посмотрим, что это такое, как их настроить и что с ними можно сделать.

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

Cron — это планировщик заданий на основе времени в Unix-подобных операционных системах, который запускает определенные задачи в будущем. Название происходит от греческого слова χρόνος (хронос), что означает время.

Наиболее часто используемая версия Cron известна как Vixie Cron. Пол Викси первоначально разработал его в 1987 году.

We are used to getting messages, and crontab provides them in various ways: email, syslog, log files. Here are some ways you can configure crontab to tell you what’s going on:

Crontab Logging

You can create a new log, or append to an old log

Crontab Mail Silence

/dev/null logging will also prevent weird script output that might terminate the crontab

Crontab Log and Silence Mail

It is a good idea to capture so syslog picks up errors (2>&1)

Crontab Mail

Sometimes when logging in you’ll see something like “You have new mail.” These could be crontab messages.

If you wish to change default mail to root instead edit your /etc/default/cron:

This file contains cron’s default settings.

How to Read Local Mail in Linux

You can easily read the mail by simply catting the file:

  • alpine
  • mutt
  • mail/mailx

Configure the “MTA” aka /usr/sbin/sendmail to send to external mail as well so you can read it in your favorite external reader. Be advised that many of these messages could contain sensitive info.

Edit /etc/aliases

You will want to send them all to the box you check. For example you might edit your /etc/alias like so:

After you edit /etc/aliases you need run the newaliases command, which updates /etc/aliases.db

Test your mail configuration with the mail command:

Основной файл конфигурации cron, /etc/crontab, содержит следующие строки:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Первые четыре строки — это переменные, настраивающие среду окружения, в котором будут работать задачи cron. Значение переменной SHELL сообщает системе о том, какую оболочку использовать (в этом примере будет использована оболочка bash), а переменная PATH определяет пути, используемые для выполнения команд. Результат выполнения задач cron будет выслан по электронной почте пользователю, определённому в переменной MAILTO. Если в качестве значения переменной MAILTO задана пустая строка (MAILTO=""), электронные письма отправляться не будут. Переменная HOME задаёт домашний каталог, используемый при выполнения команд или сценариев.

Каждая строка в файле /etc/crontab имеет следующий формат:

minute   hour   day   month   dayofweek   command
  • minute — любое целое число от 0 до 59

  • hour — любое целое от 0 до 23

  • day — любое целое от 1 до 31 (день должен быть корректным, если указан месяц)

  • month — любое целое от 1 до 12 (или короткое название месяца, например: jan, feb и так далее)

  • dayofweek — любое целое от 0 до 7, где 0 или 7 означает Воскресенье (или короткое название дня недели, например: sun, mon и так далее)

  • command — команда, которая должны быть выполнена. Командой может быть как простая команда, например, ls /proc >> /tmp/proc, или команда запуска написанного вами специального сценария.

Для любых указанных выше параметров можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, указанное другими параметрами.

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.

Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.

Косая черта (/) используется для определения шага значений. Целочисленное значение может быть пропущено в диапазоне, если после диапазона указать /<целое>. Например, значение минут 0-59/2, определяет, что будет пропущена каждая вторая минута. В качестве шага значений также может быть указана звёздочка. Например, значение месяца */3 определяет, что будет пропущен каждый третий месяц.

Любые строки, начинающиеся с символа решетки (#), являются комментариями, и не обрабатываются.

Пример 22-1. Примеры файлов crontab

# record the memory usage of the system every monday 
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh

Как видно из файла /etc/crontab, в нём используется сценарий run-parts, чтобы запускающий сценарии в каталогах /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly и /etc/cron.monthly соответственно ежечасно, ежедневно, еженедельно и ежемесячно. Файлы в этих каталогах должны быть сценариями оболочки.

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

Демон cron каждую минуту ищет изменения в файле etc/crontab и каталогах etc/cron.d/ и /var/spool/cron. Если какие-либо изменения будут найдены, они загружаются в память. Таким образом, демон не нуждается в перезапуске при изменении файла crontab.

Today did a database backup script, incidentally the system has to learn about Linux under the timing of the execution of the script Settings. In Linux, the scheduled execution is performed by adding a custom schedule to the crontab file. The configuration is a little more complicated than in Windows (because there is no graphical interface), but it is not too complicated. The key is to remember the directory /var/spool/cron after using it once.

Today did a database backup script, incidentally the system has to learn about Linux under the timing of the execution of the script Settings. In Linux, the scheduled execution is performed by adding a custom schedule to the crontab file. The configuration is a little more complicated than in Windows (because there is no graphical interface), but it is not too complicated. The key is to remember the directory /var/spool/cron after using it once. Here is a look at the specific use method:

First look at the /etc/crontab file:Copy the code

$ cat /etc/crontab

Дополнительно:  Windows 10 устранение неполадок нет синего экрана

run-parts

root run-parts /etc/cron.hourly

* root run-parts /etc/cron.daily

0 root run-parts /etc/cron.weekly

42 4 1

root run-parts /etc/cron.monthly

The first four lines are about setting up the environment variables for the CRON task to run. The value of the SHELL variable specifies the SHELL environment used by the system (bash SHELL in this example). The PATH variable defines the PATH for executing commands. The output from Cron is e-mailed to the user name defined by the MAILTO variable. If the MAILTO variable is defined as an empty string (MAILTO=

record the memory usage of the system every monday

at 3:30AM in the file /tmp/meminfo

mon cat /proc/meminfo /tmp/meminfo

Run Custom SCR īpt the first day of every month at 4:10AM

10 4 1

/ root/SCR and PTS/backup. Sh

Users other than root can execute crontab configuration schedule tasks. Crontabs defined by all users are stored in the /var/spool/cron directory, and tasks are executed as creators. To create a crontab for a specific user, log in as the user and run the crontab command

* /home/dbbackup/db1backup.sh backup

* /home/dbbackup/db2backup.sh backup

Said every day at 3 o 'clock to perform/home/dbbackup/db1backup sh backup, perform at 4 / home/dbbackup/db2backup sh backup, if it is once every five minutes to perform can be changed to:Copy the code

* /home/dbbackup/db2backup.sh backup

If the crontab needs to be saved, the crontab will be saved in the following file: /var/spool/cron/username. The file name varies depending on the user name. The cron service checks the changes in the /etc/crontab, /etc/cron.d/, and /var/spool/cron files every minute. If a change is found, it is downloaded to storage. Therefore, even if the crontab file changes, the program does not need to be restarted. Crontab is recommended for user-defined tasks-eD /crond restart command to restart the Crond process. The official file says that you do not need to restart the process, but I encountered a problem that I cannot run the task without restarting the process. At first, I don't know what run-parts means in /etc/crontab file. If I add the command in /etc/crontab format, it always fails. Later, I know that run-parts means directory.Copy the code

Here is another introduction:

/sbin/service crond start // Starts the service

/sbin/service crond stop // Stops the service

/sbin/service crond restart // Restart the service

/sbin/service crond reload // Reloads the configuration

You can also start the service automatically when the system starts:

/sbin/service crond start

1. Run the crontab command to edit the file

For example, if root checks its cron Settings, run crontab -u root -l

For example, root wants to remove Fred’s cron setting: crontab -u Fred -r

When editing the Cron service, there are some formats and conventions for editing content. Enter crontab -u root -e

* ls /tmp/ls.txt

59 minutes (0 -)

Sunday (0-6) //0 stands for Sunday

There are a few special symbols besides numbers"*","/"and"-",",", * represents all the numbers in the value range,"/"Stands for every,"* / 5"For every 5 units,"-"From some number to some number,","Separate a few discrete numbers. Here are a few examples:Copy the code

Every morning at six o ‘clock

Every two hours

Every two hours between 11:00 p.m. and 8:00 a.m., 8:00 a.m

On the 4th of the month and every Monday through Wednesday at 11 a.m

0 11 4 * 1-3 command line

At 4 o ‘clock in the morning on January 1st

0 4 1 1 * command line

After editing the cron Settings of a user, cron automatically generates a file with the same name as the user in /var/spool/cron. The cron information of the user is recorded in this file. This file cannot be edited directly, only crontab can be used-eTo edit. Read this file every hour after cron starts to check if you want to execute the commands inside. Therefore, you do not need to restart the CRon service after modifying the file.Copy the code

2. Edit the /etc/crontab file to configure cron

The cron service not only reads all files in /var/spool/cron once per minute, but also reads /etc/crontab once, so we can configure this file to do something with the cron service. Crontab configuration is specific to a user, while editing /etc/crontab is specific to a system task. The file format for this file is:Copy the code

MAILTO=root // If an error occurs or there is data output, send the data to the account as an email

run-parts

According to hourly accounts, the /etc/cron.hourly scripts are run by user root run-parts

* root run-parts /etc/cron.daily // Run the scripts in /etc/cron.daily every day

0 root run-parts /etc/cron.weekly // Runs the script in /etc/cron.weekly every week

42 4 1

Root run-parts /etc/cron.monthly // Run the scripts in /etc/cron.monthly every month

Notice the «run-parts» parameter. If you remove this parameter, you can write the name of the script you want to run instead of the directory.

You may like:

Запуск и остановка службы

Чтобы запустить службу cron, выполните команду /sbin/service crond start. Чтобы остановить её, выполните команду /sbin/service crond stop. Рекомендуется настроить запуск этой службы при загрузке системы. За подробными инструкциями по настройка автоматического запуска службы cron при загрузке системы обратитесь к главе 20 Управление доступом к службам.

Управление доступом к cron

Для ограничения доступа к cron используются файлы /etc/cron.allow и /etc/cron.deny. Формат списков управления доступом в обоих файлах прост — в каждой строке файла указывается одно имя пользователя. Пробельные символы в этих файлах не допускаются. Перезапускать демон cron (crond) после изменения файлов управления доступом не требуется. Файлы управления доступом обрабатываются каждый раз, когда пользователь пытается добавить или удалить задание cron.

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

Если файл cron.allow существует, использовать cron разрешено только перечисленным в нём пользователям, а файл cron.deny игнорируется.

Если cron.allow не существует, пользователям, перечисленным в cron.deny, использовать cron не разрешается.

Anacron

Одна из проблем с Cron заключается в том, что он предполагает, что система работает непрерывно (24 часа в сутки). Это вызывает проблемы для машин, которые не работают весь день (например, персональные компьютеры). Если система отключается в течение запланированного времени выполнения задачи, Cron не будет выполнять эту задачу задним числом.

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

Только root или пользователь с правами администратора может управлять задачами Anacron. Anacron не работает в фоновом режиме, как , а только один раз, выполняя задачи, которые должны быть выполнены.

Anacron использует файл конфигурации (так же, как crontab) с именем anacrontabs. Этот файл находится в /etc каталоге.

Содержимое этого файла выглядит следующим образом:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

/bin/sh
/sbin:/bin:/usr/sbin:/usr/bin
root
# the maximal random delay added to the base delay of the jobs


-22

#period in days   delay in minutes   job-identifier   command
              cron.daily               run-parts /etc/cron.daily
             cron.weekly              run-parts /etc/cron.weekly
@monthly      cron.monthly             run-parts /etc/cron.monthly

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

Третий столбец — это уникальное имя, которое идентифицирует задачу в файлах журнала Anacron.

Четвертый столбец — это фактическая команда для запуска.

Рассмотрим следующую запись:

              cron.daily               run-parts /etc/cron.daily

Эти задачи выполняются ежедневно, через пять минут после запуска Anacron. Он использует run-partsдля выполнения всех скриптов внутри/etc/cron.daily.

Вторая запись в списке выше выполняется каждые 7 дней (еженедельно) с задержкой 25 минут.

Столкновение между Cron и Anacron

Как вы, наверное, заметили, Cron также настроен на выполнение скриптов внутри /etc/cron.* каталогов. Различные варианты Linux обрабатывают такое возможное столкновение с Anacron по-разному. В Ubuntu Cron проверяет, присутствует ли Anacron в системе, и если это так, он не будет выполнять сценарии в /etc/cron.* каталогах.

В других версиях Linux Cron обновляет временные метки Anacron при выполнении задач. Anacron не будет выполнять их, если Cron уже запустил их.

Запуск и остановка службы

Чтобы запустить службу cron, выполните следующую команду: /sbin/service crond start. Чтобы остановить её, выполните команду: /sbin/service crond stop. Рекомендуется, чтобы эта служба запускалась при загрузке системы. Обратитесь к Главе 8 за указаниями по настройке автоматического запуска службы cron при загрузке системы.

Cron и PHP

Обычно мы запускаем наши скрипты командной строки PHP, используя исполняемый файл PHP.

php script.php

В качестве альтернативы мы можем использовать shebang в начале скрипта и указать на исполняемый файл PHP:



?php

// PHP code here

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

Дополнительно:  Восстановление пароля root astra linux

Чтобы иметь более надежные скрипты командной строки PHP, мы можем использовать сторонние компоненты для создания консольных приложений, таких как Symfony Console Component или Laravel Artisan. Эта статья является хорошим началом для использования консольного компонента Symfony.

Как Cron интерпретирует файлы Crontab

После запуска Cron он выполняет поиск в области катушки, чтобы найти и загрузить файлы crontab в память. Он дополнительно проверяет /etc/crontab/etc/cron.d каталоги и или для системных crontabs.

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

Кроме того, Cron регулярно (каждую минуту) проверяет, изменилось ли modtimeвремя изменения каталога spool. Если это так, он проверяет modetimeвсе загруженные crontabs и перезагружает те, которые изменились. Вот почему нам не нужно перезапускать при установке нового задания cron.

Разрешения Cron

Мы можем указать, какой пользователь должен иметь возможность использовать Cron, а какой нет. Есть два файла, которые играют важную роль, когда дело доходит до разрешений cron: /etc/cron.allowи /etc/cron.deny.

Если /etc/cron.allow существует, то наше имя пользователя должно быть указано в этом файле для использования crontab. Если /etc/cron.deny существует, он не должен содержать наше имя пользователя. Если ни один из этих файлов не существует, то на основе параметров конфигурации, зависящих от сайта, либо , либо  смогут использовать crontab команду. Например, в Ubuntu, если ни один файл не существует, все пользователи могут использовать crontab по умолчанию.

Мы можем поместить ALL/etc/cron.deny файл, чтобы запретить всем пользователям использовать cron:

 ALL  /etc/cron.deny

Примечание: Если мы создаем /etc/cron.allow файл, нет необходимости создавать /etc/cron.deny файл, поскольку он имеет тот же эффект, что и создание /etc/cron.deny файла с ALL в нем.

Настройка заданий cron

Основной файл конфигурации cron, /etc/crontab, содержит следующие строки:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Первые четыре строки — это переменные, настраивающие окружение, в котором будут работать задачи cron. Переменная SHELL сообщает системе, какую оболочку использовать (в данном примере это оболочка bash), а переменная PATH определяет пути, используемые при выполнении команд. Результат выполнения задач cron будет выслан по электронной почте пользователю, определённому в переменной MAILTO. Если в качестве значения переменной MAILTO задана пустая строка (MAILTO=»»), электронные письма не отправляются. Переменная HOME задаёт домашний каталог, используемый при выполнении команд или сценариев.

Каждая строка в файле /etc/crontab представляет отдельное задание и имеет следующий формат:

minute   hour   day   month   dayofweek   command
  • minute — любое целое число от 0 до 59

  • hour — любое целое от 0 до 23

  • day — любое целое от 1 до 31 (день должен быть допустимым, если задан месяц)

  • month — любое целое от 1 до 12 (или краткое название месяца, например, jan, feb и т. д.)

  • dayofweek — любое целое от 0 до 7, где 0 или 7 обозначает воскресенье (или краткое название дня недели, например, sun или mon)

  • command — выполняемая команда (это может команда вроде ls /proc >> /tmp/proc или команда, запускающая дополнительный сценарий)

Для любых указанных выше параметров можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц в день, определённый другими параметрами.

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 обозначает набор целых чисел 1, 2, 3 и 4.

Последовательность значений, разделенных запятыми (,), обозначает список. Например, перечисление 3, 4, 6, 8 обозначает четыре указанных целых числа.

Прямая косая черта (/) используется для определения шага значений. Число в диапазоне может быть пропущено, если после диапазона указать /<целое>. Например, значение поля минут 0-59/2, определяет, что будет пропущена каждая вторая минута. В качестве шага значений также может быть указана звёздочка. Например, чтобы запускать задание раз в три месяца, в поле месяца можно использовать значение */3

Любые строки, начинающиеся с символа решетки (#), являются комментариями и не обрабатываются.

Как показывает пример файла /etc/crontab, сценарий run-parts запускает сценарии в каталогах /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ каждый час, день, неделю, месяц соответственно. Файлы в этих каталогах должны быть сценариями оболочки.

Если задание cron нужно выполнить по расписанию, но не ежечасно, ежедневно, еженедельно или ежемесячно, его можно добавить в каталог /etc/cron.d. Все файлы в этом каталоге имеют тот же синтаксис, что и /etc/crontab. Примеры заданий показаны в примере 35-1.

# записывает данные об использовании памяти в системе каждый понедельник
# в 3:30 в файл /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# запускает специальный сценарий каждый день каждого месяца в 4:10
10 4 1 * * /root/scripts/backup.sh

Пример 35-1. Пример заданий crontab

Демон cron проверяет наличие изменений в файле /etc/crontab, каталоге /etc/cron.d/ и каталоге /var/spool/cron/ каждую минуту. Если обнаруживаются какие-либо изменения, они загружаются в память. Таким образом, демон не нуждается в перезапуске при изменении файла crontab.

Перекрытия задач

Бывают случаи, когда запланированные задачи занимают гораздо больше времени, чем ожидалось. Это приведет к перекрытиям, то есть некоторые задачи могут выполняться одновременно. В некоторых случаях это может не вызвать проблемы, но когда они изменяют одни и те же данные в базе данных, у нас возникнет проблема. Мы можем преодолеть это, увеличив частоту выполнения задач. Тем не менее, нет никакой гарантии, что эти перекрытия не повторятся.

У нас есть несколько вариантов предотвращения перекрытия заданий cron.

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

Flock — хороший инструмент для управления файлами блокировки из сценариев оболочки или командной строки. Эти файлы блокировки полезны для того, чтобы узнать, запущен ли скрипт.

При использовании совместно с Cron соответствующие задания cron не запускаются, если файл блокировки существует. Вы можете установить Flock, используя apt-get или yum, в зависимости от дистрибутива Linux.

  flock
yum  flock

Рассмотрим следующую запись crontab:

* * * * * /usr/bin/flock --timeout /path/to/cron.lock /usr/bin/php /path/to/scripts.php

В предыдущем примере flock ищет /path/to/cron.lock. Если блокировка будет получена за одну секунду, она запустит скрипт. В противном случае он потерпит неудачу с кодом выхода 1.

Использование механизма блокировки в скриптах

Если задание cron выполняет сценарий, мы можем реализовать механизм блокировки в сценарии. Рассмотрим следующий PHP-скрипт:

?php
  sys_get_temp_dir   md5__FILE__  
       file_exists ? trimfile_get_contents  null

 is_null  posix_getsid   

    // Do something here
    
    // And  create/update the lock 
    file_put_contents, getmypid

  
    exit'Another instance of the script is already running.'

В предыдущем коде мы сохраняем pid текущий PHP-процесс в файле, который находится в системном tempкаталоге. Каждый PHP-скрипт имеет свой собственный файл блокировки, который является MD5-хэшем имени файла скрипта.

Сначала мы проверяем, существует ли файл блокировки, а затем получаем его содержимое, которое является идентификатором процесса последнего запущенного экземпляра скрипта. Затем мы передаем pid PHP-функцию posix_getsid , которая возвращает идентификатор сеанса процесса. Если posix_getsid возвращается false, это означает, что процесс больше не работает, и мы можем безопасно запустить новый экземпляр.

Файлы Crontab

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

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

Ниже приведен пример файла crontab с одной записью:

  * * *  /var/www/sites/db_backup.sh

Первая часть 0 0 * * *— это выражение cron, которое определяет частоту выполнения. Вышеуказанное задание cron будет выполняться один раз в день.

Пользователи могут иметь свои собственные файлы crontab, названные в честь их имени пользователя, зарегистрированного в /etc/passwd файле. Все файлы crontab пользовательского уровня находятся в области spool Cron. Вы не должны редактировать эти файлы напрямую. Вместо этого мы должны редактировать их с помощью утилиты crontab командной строки.

Примечание: Каталог spool варьируется в разных дистрибутивах Linux. На Ubuntu это /var/spool/cron/crontabs в то время как в CentOS это /var/spool/cron.

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

 -e

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

 nano  -e

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

Каждая команда в файле crontab выполняется с точки зрения пользователя, которому принадлежит crontab. Если ваша команда выполняется как root (sudo), вы не сможете определить этот crontab из своей учетной записи пользователя, если вы не войдете в систему как root.

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

 -l

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

 /path/to/the/file/containing/cronjobs.txt

Предыдущая команда перезапишет существующий файл crontab /path/to/the/file/containing/cronjobs.txt.

Чтобы удалить crontab, мы используем -r опцию:

 -r

Анатомия записи Crontab

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

 # ┌───────────── min (0 - 59) 
 # │ ┌────────────── hour (0 - 23)
 # │ │ ┌─────────────── day of month (1 - 31)
 # │ │ │ ┌──────────────── month (1 - 12)
 # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  command to execute

В первых двух полях указывается время ( и ), в которое будет выполняться задача. Следующие два поля указывают  и . Пятое поле указывает .

Дополнительно:  ▷ Не работают USB порты - пути решения проблемы | WebDoctor

Cron выполнит команду, когда минута, час, месяц и  или  совпадут с текущим временем.

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

  -20/5 Feb  /path/to/command

Предыдущее задание cron будет выполняться один раз в день каждые пять дней, с 5 по 20 февраля  все вторники февраля.

Важно: Когда и день месяца, и день недели имеют определенные значения (не звездочку), он создаст OR условие, то есть оба дня будут совпадать.

Синтаксис в system crontabs (/etc/crontab) немного отличается от crontabs пользовательского уровня. Разница в том, что шестое поле — это  команда, а , от имени которого мы хотим запустить задание.

* * * * * testuser /path/to/command

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

Редактирование Crontab других пользователей

Возможно, нам придется редактировать файлы crontab других пользователей. Для этого мы используем -u опцию, как показано ниже:

 -u username -e

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

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

  -e

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

 

Стандартные и нестандартные значения Crontab

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

Диапазоны

Мы можем передавать диапазоны чисел:

 -18 -15 * * /path/to/command

Вышеуказанное задание cron будет выполняться с 6 утра до 6 вечера с 1-го по 15-е число каждого месяца в году. Обратите внимание, что указанный диапазон включен, поэтому 1-5 означает 1,2,3,4,5.

Списки

Список — это группа значений, разделенных запятыми. Мы можем иметь списки в качестве значений полей:

 ,5,7 * * * /path/to/command

Приведенный выше синтаксис будет запускать задание cron в 1 am, 4 am, 5 am и 7 am каждый день.

Шаги

Шаги можно использовать с диапазонами или символом звездочки(*). Когда они используются с диапазонами, они указывают количество значений, которые нужно  через конец диапазона. Они определяются «/" символом после диапазона, за которым следует число. Рассмотрим следующий синтаксис:

 -18/2 * * * /path/to/command

Вышеуказанное задание cron будет выполняться каждые два часа с 6 утра до 6 вечера.

Когда шаги используются со звездочкой, они просто указывают частоту этого конкретного поля. Например, если мы устанавливаем минуту*/5, это просто означает каждые пять минут.

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

 -10/5,14,15,18-23/3   * /path/to/command

Вышеуказанное событие будет проходить каждые пять часов с полуночи 1 января до 10 утра, 2 вечера, 3 вечера, а также каждые три часа с 6 вечера до 11 вечера.

Имена

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

* * * Feb,mar sat,sun /path/to/command

Предыдущее задание cron будет выполняться только по субботам и воскресеньям февраля и марта.

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

Предопределенные определения

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

  • annual Запуск один раз в год в полночь 1 января (0 0 1 1 *)
  •  запуск один раз в месяц, в полночь первого дня месяца (0 0 1 * *)
  •  запуск один раз в неделю в полночь воскресенья (0 0 * * 0)
  •  запуск один раз в день в полночь (0 0 * * *)
  •  запуск в начале каждого часа (0 * * * *)
  •  Запуск один раз при запуске

Несколько команд в одном задании Cron

Мы можем выполнить несколько команд в одном задании cron, разделив их точкой с запятой (;).

* * * * * /path/to/command-1 /path/to/command-2

Если выполняемые команды зависят друг от друга, мы можем использовать двойной амперсанд (&&) между ними. В результате вторая команда не будет выполняться, если первая не выполняется.

* * * * * /path/to/command-1  /path/to/command-2

Переменные среды

Переменные среды в файлах crontab имеют форму VARIABLE_NAME = VALUE (пробелы вокруг знака равенства необязательны). Cron не создает никаких файлов запуска из домашнего каталога пользователя (когда он работает на уровне пользователя cron). Это означает, что мы должны вручную установить любые пользовательские настройки, требуемые нашими задачами.

Cron автоматически устанавливает некоторые переменные среды при запуске. HOMEи LOGNAME устанавливаются из информации владельца crontab /etc/passwd в. Однако мы можем переопределить эти значения в нашем файле crontab, если в этом есть необходимость.

Есть также еще несколько переменных, например SHELL, указывающих оболочку, которая выполняет команды. Это /bin/sh по умолчанию. Мы также можем установить PATH, в котором искать программы.

  /usr/bin/usr/local/bin

Важно: мы должны заключать значение в кавычки, когда в значении есть пробел. Обратите внимание, что значения являются обычными строками. Они не будут интерпретироваться или анализироваться каким-либо образом.

Разные часовые пояса

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

Быстрое устранение неполадок

Абсолютный путь к командам

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

* * * * * /usr/local/bin/php /absolute/path/to/the/command

Убедитесь, что  cron запущен

Если наши задачи вообще не выполняются, сначала нам нужно убедиться, что Cron запущен:

 aux   crond

Вывод должен быть похож на этот:

root              ?        Ss       :49 crond

Проверка /etc/cron.allowи /etc/cron.deny файлы

Когда задания cron не выполняются, нам нужно проверить /etc/cron.allow, существует ли. Если это так, нам нужно убедиться, что мы перечислили наше имя пользователя в этом файле. И если /etc/cron.deny существует, нам нужно убедиться, что наше имя пользователя не указано в этом файле.

Если мы редактируем файл crontab пользователя, в то время как пользователь не существует в /etc/cron.allow файле, включая пользователя в /etc/cron.allow не будет запускать cron, пока мы не отредактируем файл crontab.

Разрешение на выполнение

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

 +x /some/file.php

Новый символ строки

Каждая запись в crontab должна заканчиваться новой строкой. Это означает, что после последней записи crontab должна быть пустая строка, иначе последнее задание cron никогда не будет выполнено.

Терминология Cron Job

  • Job: единица работы, серия шагов, чтобы что-то сделать. Например, отправка электронной почты группе пользователей. В этой статье будет использоваться задачазаданиеcron или событие взаимозаменяемо.
  • Daemon: компьютерная программа, которая работает в фоновом режиме, служа различным целям. часто запускаются во время загрузки. Веб-сервер — это демон, обслуживающий HTTP-запросы. Cron — это для выполнения запланированных задач.
  • Cron Job: задание cron — это запланированное задание  задание, когда оно должно быть выполнено.
  • Webcron планировщик заданий на основе времени, который работает в серверной среде. Это альтернатива стандартному Cron, часто на общих веб-хостах, которые не предоставляют доступ к оболочке.

Завершение

Cron — это , выполняющий список событий, запланированных на будущее. Мы определяем эти задания в специальных файлах конфигурации, называемых файлами crontab. Пользователи могут иметь свой собственный файл crontab, если им разрешено использовать Cron на основе /etc/cron.allow или /etc/cron.deny files. В дополнение к заданиям cron на уровне пользователя Cron также загружает общесистемные задания cron, которые немного отличаются по синтаксису.

Наши задачи обычно PHP скрипты или утилиты командной строки. В системах, которые не работают все время, мы можем использовать Anacron для запуска событий, которые происходят в течение nнескольких дней.

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

Перенаправление вывода

Мы можем перенаправить вывод нашего задания cron в файл, если команда (или скрипт) имеет какой-либо вывод:

* * * * * /path/to/php /path/to/the/command  /var/log/cron.log

Мы можем перенаправить стандартный вывод на dev null, чтобы не получить электронное письмо, но все же отправить стандартное сообщение об ошибке:

* * * * * /path/to/php /path/to/the/command  /dev/null

Чтобы запретить Cron отправлять нам какие-либо электронные письма, мы меняем соответствующую запись crontab, как показано ниже:

* * * * * /path/to/php /path/to/the/command  /dev/null 

Это означает “отправить как стандартный вывод, так и вывод ошибки в забвение”.

Отправьте вывод по электронной почте

Выходные данные отправляются по почте владельцу crontab или электронной почте (адресам), указанным в переменной MAILTOсреды (если стандартный вывод или стандартная ошибка не перенаправляются, как указано выше).

Если MAILTO установлено значение empty, в результате выполнения задания cron электронное письмо отправлено не будет.

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

admin@example.com,dev@example.com
* * * * * /path/to/command

Оцените статью
Master Hi-technology
Добавить комментарий