Проверка исполнения крона.

InstantCMS 2.X
#1 2 июля 2021 в 16:15
Привет. Можно ли как то проконтролировать исполнение задачи крона? Так как бывает, что крон имеет тенденцию не выполняться по разным причинам и хотелось бы иметь "запасной план"). Например в контроллере content есть настроенное крон событие, которое выполняет хук. Хук выполняет действие, которое нельзя проверить запросом. Можно ли как то "отловить" выполнение хука?
#2 2 июля 2021 в 17:28
1. В хуке создайте файл средствами php.
2. Откройте этот файл и запишите в него дату, время и нужную информацию по данному событию средствами php.
3. Закройте файл средствами php.
4. Ждите запуска крона.
5. Любуйтесь информацией в этом файле. Если файл пуст, то либо накосячили в первый двух пунктах, либо событие по крону не запустилось. Косяки первый двух пунктов можно увидеть запустив крон вручную.
#3 2 июля 2021 в 17:56
Loadырь, понял. Спасибо).
#4 9 июля 2021 в 05:19

крон имеет тенденцию не выполняться

Lora

такого не бывает. крон может не выполниться из-за ошибки, прописывайте правильно, если брать php-скрипты, то обязательно переход в директорию скрипта, а именно: 

  1. cd ~/домен/папкасайта/ && php cron.php > /dev/null 2>&1

если нужно проверить крон, то настраиваем вывод

  1. cd ~/домен/папкасайта/ && php cron.php > test_cron.txt

в этой команде крону указывается переход в папку и затем выполнение необходимого скрипта

#5 9 июля 2021 в 08:46

прописывайте правильно, если брать php-скрипты, то обязательно переход в директорию скрипта,

Dublic

Не вводите людей в заблуждение, интерпретатору php можно указать, например, полный путь к исполняемому скрипту.

#6 9 июля 2021 в 13:13

интерпретатору php можно указать, например, полный путь к исполняемому скрипту

IamB

нет, нельзя, т.к. это разные уровни запуска скрипта, и мы не про интерпретатор а про CRON

например: php -f /site.domen/papka/cron.php это глобальный вызов скрипта от текущего пользователя, на многих серверах крон не запустит этот скрипт

cd ~/домен/папкасайта/ && php cron.php > /dev/null 2>&1 

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

#7 9 июля 2021 в 13:31

 Dublic, вы в данный момент уже не только со мной спорите, но и с документацией

#8 9 июля 2021 в 15:12

вы в данный момент уже не только со мной спорите, но и с документацией

IamB

Судя по вашему профилю, вы зарегистрированы на этом сайте 3 года назад. Тому, что указано в документации по CRON уже 10 лет. Т.е. это не корректные данные по CRON (дезинформация), работа ядра Linux значительно изменилась, крон вынесен в отдельный процесс зависящий от SystemD

Добавлено спустя 15 минут

Ради интереса сейчас проверил. У меня три сервера и ни на одном эта 👇 команда CRON не выполняется 

  1. php -f /path/to/site/cron.php > /dev/null

один сервер на VestaCP, другой в облаке хостера с их панелью, третий с панелькой FastPanel, на всех трёх крон не может запустить скрипт таким образом 👆

а вот так 👇, скрипт корректно запускается на всех трех серверах 

  1. cd ~/path/to/site/ && php cron.php > /dev/null 2>&1

такой метод запуска php-скриптов по крон я использую уже минимум 4 года

#9 9 июля 2021 в 15:22

Судя по вашему профилю, вы зарегистрированы на этом сайте 3 года назад

Dublic

И что?

Тому, что указано в документации по CRON уже 10 лет. Т.е. это не корректные данные по CRON (дезинформация), работа ядра Linux значительно изменилась, крон вынесен в отдельный процесс зависящий от SystemD

Dublic

Вы это Fuze сообщите.

А внизу той странички документации написано

manual/settings/scheduler.txt · Последнее изменение: 10.09.2019 16:10 — fuze

#10 9 июля 2021 в 15:39

Вы это Fuze сообщите

IamB

либо Fuze в линукс не разбирается, либо «болт» положен на безопасность сервера. Или настройки указаны исключительно в рамках сервера (хостинга) который используют разработчики instantCMS

Добавлено спустя 10 минут

вы не переживайте, сегодня я внесу изменения на рассмотрение по команде крон в гитхаб для версии instantCMS 2.15

#11 9 июля 2021 в 15:48

вы не переживайте, сегодня я внесу изменения на рассмотрение по команде крон в гитхаб для версии instantCMS 2.15

Dublic

Ссылку потом сюда положите, пожалуйста.

#12 9 июля 2021 в 16:01

Ссылку потом сюда положите, пожалуйста.

IamB

Вот ссылка на правку на гитхабе github.com/instantsoft/icms2/pull/1340

#13 9 июля 2021 в 16:13

нет, нельзя, т.к. это разные уровни запуска скрипта, и мы не про интерпретатор а про CRON

Dublic

на многих серверах крон не запустит этот скрипт

Dublic

либо Fuze в линукс не разбирается, либо «болт» положен на безопасность сервера.

Dublic

Я не знаю, про что вы) Безопасность сервера тут не при чем. Не запуститься может по одной причине: если указан не полный путь к PHP интерпретатору. /usr/bin/php или иной верный полный путь решит проблему. В документации указан принцип и какой файл указывать для запуска, т.е. просто рекомендации. Внесу туда полный путь к PHP. Кроме этого, не запускаться может потому, что при запуске задачи CRON переменные окружения (пути к /bin, /usr/bin и т.п.) не обозначены. Обычно в файле команд CRON делают финт ушами и обозначают их там.

Но я ни разу не сталкивался с проблемой запуска задачи CRON.

И да, с серверами Linux я работаю 15 лет 🙂

я внесу изменения на рассмотрение по команде крон

Dublic

На гит то зачем?

#14 9 июля 2021 в 18:32

На гит то зачем?

Fuze

дак чтоб во время инсталляции команда уже была корректна. Это более универсальная команда: 

  1. cd ~/path/to/site/ && php cron.php > /dev/null 2>&1

а эта 👇 команда «специфична» к настройкам сервера

  1. php -f /path/to/site/cron.php > /dev/null

ПОЧЕМУ?

Как минимум потому, что мы не в кроне определяем где находится интерпретатор и какой именно версии, а в настройках окружения и/или вебсервере. Поэтому, в кроне мы просто пишем в какую папку перейти и какой скрипт запустить, всё остальное мы настраиваем в других местах (окружение и веб-сервер)

Добавлено спустя 3 минуты

И да, с серверами Linux я работаю 15 лет

Fuze

я чуток поменьше — 13 лет, но данном «линукс-возрасте» разница в деталях «кто где/куда копал и что и как использовал»

Добавлено спустя 6 минут

Я не знаю, про что вы) Безопасность сервера тут не при чем

Fuze

Вы упустили: Или настройки указаны исключительно в рамках сервера (хостинга) который используют разработчики instantCMS 😉

Добавлено спустя 46 минут

 

Я не знаю, про что вы

Fuze


чуток подумав как объяснить, решил дополнить. Через крон наш скрипт запускается через php-cli. Но php-cli у нас на разных уровнях разный, есть уровень сервера, есть уровень приложения. Команда php -f /path/to/site/cron.php запускает php-cli на уровне всего сервера от текущего пользователя, т.к. крон работает только глобально на весь сервер и никак иначе. Команда cd ~/path/to/site/ && php cron.php запускает php-cli на уровне приложения от текущего пользователя

Добавлено спустя 58 минут

и снова дополню, чтоб уже наверняка. Первая команда php -f /path/to/site/cron.php говорит крону " — выполни вот этот файл" и он выполняет исходят из глобальных настроек юзера. Вторая команда cd ~/path/to/site/ && php cron.php говорит крону "- выполни этот файл в той-то директории"

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

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