One place for hosting & domains

      задач

      Использование Cron для автоматизации задач в CentOS 8


      Предыдущая версия данного обучающего руководства была написана Шоном Льюисом.

      Введение

      Cron — это хронологический демон-планировщик задач, работающий в операционных системах типа Unix, включая дистрибутивы Linux. Cron запускается в фоновом режиме, а задачи, запланированные в cron и именуемые «задачи cron», выполняются автоматически, что делает cron полезным для автоматизации связанных с обслуживанием задач.

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

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к компьютеру под управлением CentOS 8. Это может быть ваш локальный компьютер, виртуальная машина или виртуальный частный сервер.

      Независимо от того, какой компьютер вы используете для выполнения этого обучающего руководства, у вас должен быть пользователь без привилегий root с настроенными правами администратора. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера CentOS 8.

      Установка cron

      Почти все дистрибутивы Linux имеют ту или иную форму cron, установленную по умолчанию. Но если вы используете компьютер на базе CentOS, на котором не установлен cron, вы можете установить его с помощью dnf.

      Перед установкой cron на компьютер с CentOS обновите локальный индекс пакетов компьютера:

      Затем выполните установку демона cron с помощью следующей команды:

      • sudo dnf install crontabs

      Эта команда будет запрашивать подтверждение установки пакета crontabs и его зависимостей. Подтвердите действие, нажав y, а затем ENTER.

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

      Чтобы запустить демон cron, воспользуйтесь следующей командой:

      • sudo systemctl start crond.service

      Чтобы настроить запуск cron при загрузке сервера, введите:

      • sudo systemctl enable crond.service

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

      Как работает Cron

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

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

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

      Поле Допустимые значения
      минута 0–59
      час 0–23
      День месяца 1–31
      месяц 1–12 или ЯНВ–ДЕК
      День недели 0–6 или ПНД–ВСК

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

      minute hour day_of_month month day_of_week command_to_run
      

      Ниже представлен функциональный пример выражения cron. Это выражение запускает команду curl http://www.google.com каждый вторник в 17:30:

      30 17 * * 2 curl http://www.google.com
      

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

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

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

      Ниже представлено несколько примеров использования компонента расписания cron:

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

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

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

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

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

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

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

      Примечание. В новых серверах CentOS 8 команда crontab -e будет открывать файл crontab вашего пользователя в редакторе vi по умолчанию. vi — очень надежный и гибкий текстовый редактор, но он может показаться непонятным тем, кто не имеет опыта работы в этом редакторе.

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

      Для этого нужно установить nano с помощью dnf:

      Нажмите y, а затем ENTER, чтобы подтвердить, что вы хотите установить nano.

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

      Добавьте внизу файла следующую строку:

      ~/.bash_profile

      . . .
      export VISUAL="nano"
      

      В результате для переменной среды VISUAL присваивается значение nano. VISUAL — это переменная среды Unix, которую многие программы — в том числе crontab — вызывают для редактирования файла. После добавления этой строки сохраните и закройте файл, нажав CTRL + X, Y, а затем ENTER.

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

      После входа в редактор вы можете ввести свое расписание для каждой задачи в новой строке. Либо пока вы можете сохранить и закрыть файл crontab. Если вы открыли файл crontab в vi, текстовом редакторе CentOS 8 по умолчанию, вы можете сделать это, нажав ESC, чтобы убедиться, что вы находитесь в режиме командной строки vi, а затем введите :x и нажмите ENTER.

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

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

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

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

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

      Output

      crontab: really delete sammy's crontab?

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

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

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

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

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

      . . .
      
      MAILTO="example@digitalocean.com"
      SHELL=/bin/bash
      HOME=/
      
      * * * * * echo ‘Run this command every minute’
      

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

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

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

      * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log
      

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

      * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
      

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

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

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

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

      • sudo echo ALL >>/etc/cron.deny
      • sudo echo ishmael >>/etc/cron.allow

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

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

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

      Output

      The user user cannot use this program (crontab)

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

      Специальный синтаксис

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

      Сокращение Краткая запись для
      @hourly 0 * * * *
      @daily 0 0 * * *
      @weekly 0 0 * * 0
      @monthly 0 0 1 * *
      @yearly 0 0 1 1 *

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

      Кроме того, краткая запись @reboot будет запускать любую команду, которая следует за ней при каждом запуске сервера:

      @reboot echo "System start up"
      

      Использование этих комбинаций при возможности поможет понимать расписание задач в вашем файле crontab.

      Заключение

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



      Source link

      Использование Cron для автоматизации задач в Ubuntu 18.04


      Предыдущая версия данного обучающего руководства была написана Шоном Льюисом.

      Введение

      Cron — это хронологический демон-планировщик задач, работающий в операционных системах типа Unix, включая дистрибутивы Linux. Cron запускается в фоновом режиме, а задачи, запланированные в cron и именуемые «задачи cron», выполняются автоматически, что делает cron полезным для автоматизации связанных с обслуживанием задач.

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

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к компьютеру с Ubuntu 18.04. Это может быть ваш локальный компьютер, виртуальная машина или виртуальный приватный сервер.

      Независимо от того, какой компьютер вы используете для выполнения этого обучающего руководства, у вас должен быть пользователь без привилегий root с настроенными правами администратора. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 18.04.

      Установка cron

      Почти все дистрибутивы Linux имеют ту или иную форму cron, установленную по умолчанию. Но если вы используете компьютер Ubuntu, где cron не установлен, вы можете установить его с помощью APT.

      Перед установкой cron на компьютер Ubuntu обновите локальный индекс пакетов компьютера:

      Затем выполните установку cron с помощью следующей команды:

      Вам также нужно убедиться, что он настроен для работы в фоновом режиме:

      • sudo systemctl enable cron

      Output

      Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron

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

      Как работает Cron

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

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

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

      Поле Допустимые значения
      минута 0–59
      час 0–23
      День месяца 1–31
      месяц 1–12 или ЯНВ–ДЕК
      День недели 0–6 или ПНД–ВСК

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

      minute hour day_of_month month day_of_week command_to_run
      

      Ниже представлен функциональный пример выражения cron. Это выражение запускает команду curl http://www.google.com каждый вторник в 17:30:

      30 17 * * 2 curl http://www.google.com
      

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

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

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

      Ниже представлено несколько примеров использования компонента расписания cron:

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

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

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

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

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

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

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

      Output

      no crontab for sammy - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:

      Введите число, соответствующее нужному вам редактору. Кроме того, вы можете просто нажать ENTER, чтобы использовать вариант по умолчанию, nano.

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

      # Edit this file to introduce tasks to be run by cron.
      #
      # Each task to run has to be defined through a single line
      # indicating with different fields when the task will be run
      # and what command to run for the task
      #
      # To define the time you can provide concrete values for
      # minute (m), hour (h), day of month (dom), month (mon),
      # and day of week (dow) or use '*' in these fields (for 'any').#
      # Notice that tasks will be started based on the cron's system
      # daemon's notion of time and timezones.
      #
      # Output of the crontab jobs (including errors) is sent through
      # email to the user the crontab file belongs to (unless redirected).
      #
      # For example, you can run a backup of all your user accounts
      # at 5 a.m every week with:
      # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
      #
      # For more information see the manual pages of crontab(5) and cron(8)
      #
      # m h  dom mon dow   command
      

      При запуске crontab -e в следующий раз, ваш файл будет автоматически открываться в этом текстовом редакторе. После входа в редактор вы можете ввести свое расписание для каждой задачи в новой строке. В противном случае вы можете сохранить изменения и закрыть файл crontab (CTRL + X, Y, а затем ENTER, если вы выбрали nano).

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

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

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

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

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

      Output

      crontab: really delete sammy's crontab? (y/n)

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

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

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

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

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

      . . .
      
      MAILTO="example@digitalocean.com"
      SHELL=/bin/bash
      HOME=/
      
      * * * * * echo ‘Run this command every minute’
      

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

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

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

      * * * * * echo ‘Run this command every minute’ >> /directory/path/file.log
      

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

      * * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1
      

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

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

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

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

      • sudo echo ALL >>/etc/cron.deny
      • sudo echo ishmael >>/etc/cron.allow

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

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

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

      Output

      The user user cannot use this program (crontab)

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

      Специальный синтаксис

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

      Сокращение Краткая запись для
      @hourly 0 * * * *
      @daily 0 0 * * *
      @weekly 0 0 * * 0
      @monthly 0 0 1 * *
      @yearly 0 0 1 1 *

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

      Кроме того, краткая запись @reboot будет запускать любую команду, которая следует за ней при каждом запуске сервера:

      @reboot echo "System start up"
      

      Использование этих комбинаций при возможности поможет понимать расписание задач в вашем файле crontab.

      Заключение

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



      Source link