@Kerm

Как при старте сервера запустить cron задачу только после старта Mysql?

У меня есть php файл в котором реализован бесконечный цикл, дело в том что при @reboot задача выполняется до старта MySQL, идет выполнение PHP файла, в момент обращения к которому MySQL не работает и вылезает ошибка, которая потом зацикливается, даже если MySQL уже поднялся все равно до тех пор пока не перезапустишь PHP файл будет эта ошибка "PHP Warning: mysqli::query(): invalid object or resource mysqli"

Вопрос такой, как выполнить задачу такого плана:

/opt/php70/bin/php /var/www/user/data/www/site.ru/mail.php при старте сервера, только после того как запустится MySQL или может есть возможность в PHP файле бесконечный цикл как то организовать таким образом чтобы при его запуске в нем не зацикливалась ошибка при старте?

Цикл там простой:

<?php
	$mailing = new Mailing();

	if ($mailing->true) {
		while(1==1) {
			$mailing->mail_pr_queue();
			sleep(5);
		}
	}

?>
  • Вопрос задан
  • 208 просмотров
Решения вопроса 3
paran0id
@paran0id Куратор тега Linux
Умный, но ленивый
Лучше, пожалуй, это делать не кроном, а systemd unit и timer. И прописать зависимость, чтобы только после mysql стартовал.
Ответ написан
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Можно просто добавить паузу в скрипт через sleep, которая даст загрузиться mysql
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ещё вариант. Если cron-задача запускается под пользователем, у которого есть права на чтение файла /var/run/mysqld/mysqld.pid (это где демон mysql хранит свой PID, у вас может быть по другому адресу) - то можно проверять наличие файла, читать из него PID, и проверять существование такого процесса через posix_getpgid($PID) или file_exists("/proc/{$PID}").

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

А самое элементарное: в начале приведённого файла - sleep(300).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sashkets
@sashkets
Прекратил отвечать после 24.02.2022
в кроне
@reboot mysqld && my_task.php

это принципиальная схема. выкинуть из автостарта mysql
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы