Перейти к содержимому

Как проверить работу задачи крона на сервере

  • автор:

Как проверить работу cron на хостинге?

Добавил задачу в планировщик на хостинге. Горит галочка что работает, интересует убедиться что он действительно работает. Как это можно сделать?

Отслеживать

задан 19 окт 2020 в 12:14

23 6 6 бронзовых знаков

Прописать запись чего-нибудь в какой-нибудь файл и проверить, что файл действительно записался?

19 окт 2020 в 12:17

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

1. Можно посмотреть в syslog что он отрабатывает, например:

# cat /var/log/syslog | grep CRON | tail Oct 19 15:09:01 G5070 CRON[4412]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean) Oct 19 15:15:01 G5070 CRON[4528]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Oct 19 15:17:01 G5070 CRON[4572]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Oct 19 15:25:01 G5070 CRON[4661]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 

2. Самому логировать

Например, создать файл cron_log.txt
А в ваш скрипт в конце добавить команду, которая например пишет дату время в cron_log.txt.
Пример:

$ crontab -l * * * * * my_cron_script.sh 
$ cat my_cron_script.sh date >> cron_log.txt 

Планировщик задач Cron и команда crontab

Cron (Command Run ON) — система для автоматического запуска программ и скриптов на сервере в определённое время.

Управлять cron нужно с помощью команды ‘crontab’.

Команда crontab -l покажет список текущих заданий, crontab -e автоматически запустит текстовый редактор и загрузит в него файл конфигурации cron. После выхода из редактора, новая конфигурация cron будет установлена (вступит в силу) автоматически.

Конфигурационный файл содержит последовательность командных строк и расписание их вызова. Пустые строки и строки, начинающиеся с символа ‘#’ игнорируются. Остальные строки являются установками переменных окружения и командами cron.

Запись crontab- файла в общем случае состоит из семи полей:

минуты часы день месяц день_недели имя_пользователя команда

Допустимые значения временных параметров:

Параметр Допустимый интервал
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12
день недели 0-7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Поле может быть задано явно или шаблоном:

  • * — любая цифра;
  • целое число;
  • целые числа через запятую — задание дискретного множества значений, например 1,2,5;
  • два целых числа, разделенные дефисом, соответствующие диапазону значений, например 3-6.

Пример готовой строки сценария cron:

# Выполнять задание в 18 часов 7 минут 13 мая если это пятница
7 18 13 5 5 /home/www/myscript.pl
# Выполнять задание раз в час в 0 минут
0 */1 * * * /home/www/myscript.pl
# Выполнять задание каждые семь часов в 0 минут
0 */7 * * * /home/www/myscript.pl
# Выполнять задание по воскресеньям в 10 час 30 минут
30 10 * * 0 /home/www/myscript.pl

Выполнение PHP-файлов

Для выполнения php скриптов из cron необходим бинарный интерпретатора PHP.

Реальный путь на сервере к корневой директории сайта и путь к PHP уточните в службе поддержки хостинга.

# Пример запуска скрипта в 5 утра каждый день:
0 5 * * * /usr/bin/php -q /home/www/script.php

Обратите внимание, при запуске из cron опция -q указывает PHP не выдавать HTTP-заголовки.

Быстрая навигация

CRON это программа, выполняющая задания по расписанию. Выполняет периодический запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени. Более подробно про использование CRON и команды crontab можно почитать на http://www.codenet.ru/webmast/php/cron.php

2. Как мне добавить крон-запись?

Пожалуйста, используйте панель для работы с кроном. Если вы измените крон вручную (через консоль SSH), панель затрет эти изменения. Используйте галочки «подавлять вывод»/»подавлять ошибки», чтобы избавиться от назойливых почтовых сообщений от крон-демона. При их установке стандартный поток вывода и вывод ошибок будут перенаправлены в /dev/null .

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

Если Вы хотите получать на почту уведомления о выполненном кроне, Вы можете задать переменную MAILTO: в меню «Установить переменные крона».

Если у вас возникают трудности с созданием cron-задания, вы можете воспользоваться визардом для создания cron-заданий, выберите меню «Добавить крон визардом».

Для начала определитесь, когда и как часто должно выполняться ваше задание. Затем удерживая нажатой клавишу CTRL выберите желаемые значения в списках. Если вы хотите чтобы задание выполнялось во всех значениях параметров (каждую минуту/час/день/) — выберите в окошках параметры (каждую минуту/час/день). Если вы хотите чтобы крон выполнялся каждый день каждый месяц, то в полях «дни», «месяцы» и «дни недели» можно ничего не выбирать. Если в списках параметров не выбраны значения — крон будет выполняться каждую минуту/час/день/месяц/день недели. После выбора всех необходимых значений, В поле «Команда» укажите выполняемую команду. К примеру:

После чего нажмите [ok] .

3. Не работает крон

Указывайте полные пути к файлам, например /usr/local/bin/wget вместо wget Узнать, где находится файл Вы можете командой which , например which wget

Бывает, что на это время на сервере уже назначено слишком много заданий, например:

*/2 * * * * cd /home/acc/domain.com/cgi-bin/fet/secured && /usr/local/bin/php -q /home/acc/domain.com/cgi-bin/fet/secured/mastercron.php

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

*/2 * * * * sleep 49; cd /home/acc/domain.com/cgi-bin/fet/secured && /usr/local/bin/php -q /home/acc/domain.com/cgi-bin/fet/secured/mastercron.php

4. Как разносить задания cron по времени?

Не запускайте 100 крон-заданий в одно и то же время. Лучше равномерно их распределите. Если надо, чтобы крон запускался один или несколько раз в час, делайте это в разные минуты:
11 * * * * command — запустится на одиннадцатой минуте
23,46,9 * * * * command — на 23, 46 и 9 минутах соответственно.

Если есть скрипты, которые надо запускать каждую минуту, распределяйте их напротяжении этой минуты командой задержки sleep
* * * * * sleep 20; command — запустится на 20-й секунде минуты.

Разнесение кронов по времени позволяет снизить нагрузку на сервер.

минуты 0-59
часы 0-23
дни месяца (числа) 0-31
месяц 1-12
дени недели 0-7 (0 и 7 — воскресенье)
5. Как ограничить время CPU для определенной программы?

Используя команду ulimit, например:

sh -c ‘ulimit -t 30 && exec /usr/local/bin/ffmpeg агрументы’

разрешит ffmpeg забрать максимум 30 секунд процессора. Ограничивается именно процессорное время, а не общее время, которое процесс может выполняться.

Дополнительно можно запускать с пониженным приоритетом:

/usr/bin/nice -n 20 sh -c ‘ulimit -t 30 && exec /usr/local/bin/ffmpeg агрументы’

где:
20 — это минимальный приоритет;
0 — нормальный приоритет (выставляется по умолчанию)

6. У меня в админке скрипта пишет, что не отрабатывает крон.

Одна из возможных ситуаций — крон долго выполняется (или зависает) и запускается другой такой же, в результате чего это задание не отрабатывает. Для избежания таких ситуаций рекомендуется использовать утилиту lockf :

/usr/bin/lockf -kst0 /tmp/lock_cron1 /usr/local/bin/php /home/acc/domain.com/cron.php

Эта команда справедлива для серверов на базе FreeBSD.

На Linux серверах эта команда выглядит чуть иначе:

/usr/local/bin/halockrun -cn /tmp/

halockrun входит в пакет hatools, его нужно устанавливать отдельно через менеджер пакетов Linux.

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

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

* * * * * /usr/local/bin/php /home/acc/domain1.com/cron.php
* * * * * /usr/local/bin/php /home/acc/domain2.com/cron.php
* * * * * /usr/local/bin/php /home/acc/domain3.com/cron.php

их запуск можно оформить в виде shell скрипта (назовём его 1mincron.sh):

#!/bin/sh
/usr/local/bin/php /home/acc/domain1.com/cron.php
/usr/local/bin/php /home/acc/domain2.com/cron.php
/usr/local/bin/php /home/acc/domain3.com/cron.php

выдать права на выполнение:

chmod +x 1mincron.sh

тогда задание cron будет выглядеть таким образом:

* * * * * /usr/bin/lockf -kst0 /tmp/lock_1mincron /home/acc/1mincron.sh

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

Проверка работы cron в Unix/Linux

Cron — это демон, который запускает задачи по указанному (заданному) времени и который работает в наиболее распространенных дистрибутивах Unix / Linux. Поскольку cronjobs основаны на времени, иногда необходимо проверить и убедиться, что задание выполнялось в запланированное время. Иногда люди настраивают cron чтобы они отправляли вывод скрипта через системную почту или перенаправляюте вывод в файл; однако не все кроны настроены одинаково, и мние из них, могут быть настроены на отправку вывода в /dev/null, и тем самым, препятствуя любой возможности проверить выполняемое задание.

Первое что стоит проверить — это наличие ПИДа по крону:

# pgrep crond
# ps ax | grep crond | grep -Ev grep

crond, если он не настроен иначе, будет отправлять сообщение журнала в syslog каждый раз, когда он вызывает запланированное задание. Самый простой способ проверить работу cron на попытку срабатываания задание, — это проверить лог-файл.

В зависимости от Unix/Linux ОС, данный файл может иметь другое название.

Если у вас, CentOS/Fedora/RedHat, то просмотреть нужно:

# less /var/log/cron

Можно отсеять ненужное и поискать только необходимую крон-джобу, например:

# cat /var/log/cron| grep -E "back" Nov 28 00:00:01 linux-notes CROND[212211]: (root) CMD (/usr/bin/bash /home/linux/scripts/backUPs.sh) Dec 1 00:00:01 linux-notes CROND[126039]: (root) CMD (/usr/bin/bash /home/linux/scripts/backUPs.sh)

Собственно, все наглядно видно.

Если у вас, Ubuntu/Debian, то просмотреть нужно:

# less /var/log/syslog

Иногда, системные администраторы меняют вывод крона и для того, чтобы проверить куда пишуться логи по cron-job-ам, выполните:

# grep cron /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none /var/log/messages # Log cron stuff cron.* /var/log/cron

С вывода видно, что у меня используется стандартный файл.

Так же, стоит проверить как настраивали крон-джобы:

# crontab -l
# crontab -l -u some_another_user

Возможно было перенаправление вывода в какой-то файл для дальнейшего анализа.

Стоит отметить, то — что некоторые кроны лежат тут:

# ls -lah /etc/cron.daily/ # ls -lah /etc/cron.hourly/ # ls -lah /etc/cron.weekly/ # ls -lah /etc/cron.monthly/

Бывает некоторые задачи запихивают туда.

Чтобы запретить или разрешить добавление крон-задат, нужно прописать юзера в:

# vim /etc/cron.d/cron.allow # vim /etc/cron.d/cron.deny

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

# service cron status # service cron start # service cron stop # service cron restart

Это все действия были для Linux, но сейчас приведу пример и для mac os x.

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

# grep cron /var/log/system.log

Но в нем не было признаков логирования крона!

Включить logging для Cron в Mac OSX

# vim /etc/syslog.conf
cron.* /var/log/cron.log

Для перезапуска syslog-а, выполняем:

# launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist # launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist

Проверяем что получилось!

А для помощи, можно вызвать:

# man crontab

А на этом, у меня все, статья «Проверка работы cron в Unix/Linux» завершена.

This entry was posted in Debian’s, FreeBSD, Kali Linux, MacOS, RHEL’s. Bookmark the permalink.

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики

  • Arch Linux (167)
  • Commands (36)
  • Debian’s (635)
    • Administration tools Ubuntu (37)
    • Backups Debian’s (7)
    • Database в Ubuntu (58)
    • Games (игры) (1)
    • Monitoring в Debian и Ubuntu (49)
    • Virtualization в Ubuntu / Debian/ Linux Mint (41)
      • Docker (22)
      • Kubernetes (6)
      • KVM (4)
      • OpenVZ (3)
      • Vagrant (5)
      • VirtualBox (6)
      • ArgoCD (1)
      • Concourse (1)
      • Gitlab (1)
      • Jenkinks (4)
      • Spinnaker (1)
      • Apache (32)
      • Cherokee (1)
      • FTP-services (5)
      • Lighttpd (1)
      • Nginx (26)
      • PHP (27)
      • Proxy для Debian’s (2)
      • Tomcat (4)
      • Панели управления в Ubuntu/Debian/Mint (24)
      • Установка и настройка почты на Ubuntu/Debian (12)
      • Хранилища (clouds) (2)
      • Administration tools freeBSD (19)
      • Database во FreeBSD (52)
      • Monitoring во freeBSD (37)
      • Virtualization во FreeBSD (22)
      • VoIP (1)
      • Установка Web сервисов (91)
      • Установка и настройка почты (6)
      • Установка из ports (пакетов) (19)
      • Установка из sorce code (исходников) (23)
      • Непрерывная интеграция (CI) (27)
      • Database в MacOS (36)
      • Monitoring в Mac OS (31)
      • Security (безопасность) (12)
      • Virtualization в Mac OS (30)
        • Docker (19)
        • Kubernetes (6)
        • Vagrant (5)
        • VirtualBox (5)
        • ArgoCD (1)
        • CircleCI (1)
        • Concourse (1)
        • Gitlab (1)
        • Jenkinks (4)
        • Spinnaker (1)
        • Administration tools CentOS (49)
        • Backups RPM’s (4)
        • Database в CentOS (68)
        • Monitoring в CentOS (67)
        • Virtualization в CentOS/ Red Hat/ Fedora (42)
          • Docker (23)
          • Kubernetes (6)
          • KVM (5)
          • OpenVZ (2)
          • Vagrant (5)
          • VirtualBox (6)
          • VMWare (3)
          • ArgoCD (1)
          • Concourse (1)
          • Gitlab (1)
          • Jenkinks (4)
          • Spinnaker (1)
          • Apache (35)
          • Cherokee (1)
          • DNS (3)
          • FTP (10)
          • Nginx (33)
          • PHP (34)
          • Proxy для RedHat’s (2)
          • Tomcat (2)
          • Voice (2)
          • Панели управления в CentOS/Red Hat/Fedora (27)
          • Прокси сервер на CentOS/RHEL/Fedora (4)
          • Установка и настройка почты на CentOS/RHEL/Fedora (14)
          • Хранилища (clouds) (1)

          соц сети

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Архив новостей

          Свежие записи

          • Pull/Push AWS ECR образов через AWS Route53 CNAME 17.11.2021
          • openpgp: signature made by unknown entity в Terraform 09.11.2021
          • Установка Terraformer в Unix/Linux 31.05.2021
          • Установка ArgoCD в Unix/Linux 06.01.2021
          • Установка tfswitch в Unix/Linux 08.12.2020

          Свежие комментарии

          • Вадим к записи Переключить версию python в Unix/Linux
          • Максим к записи Сохраняем все резервные копии в Dropbox
          • Артём к записи Переключить версию python в Unix/Linux
          • Владислав к записи Добавить Swap в CentOS/Fedora/RedHat
          • Александр к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux

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

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