Должны ли 2 стандартных cron всегда работать?
Мой вопрос сводится к тому, должны ли несколько процессов magento cron:run -vvv всегда выполняться и постоянно попадать в MySQL.
Я настраиваю Magento 2.2.1 через Google Cloud, и у меня есть 3 стандартных задания cron, которые были предварительно настроены через установку Magento в 1 клик от Google.
*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv 2>&1
*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/update/cron.php 2>&1
*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/bin/magento setup:cron:run -vvv 2>&1
Глядя на top-c всегда запущено 2 процесса php.bin, которые постоянно воздействуют на MySQL и заставляют его использовать около 50-70% процессора все время. Вот снимок того, как это обычно выглядит.
PID USER PR NI VIRT RES SHR S %CPU %MEM
19327 mysql 20 0 3872884 332876 19172 S 60.8 3.4 332:42.45 /opt/bitnami/mysql/bin/mysqld.bin --defaults-file=/opt/bitnami/mysql/my.cnf --basedir=/opt/bitnami+
26458 bitnami 20 0 679516 476444 64492 S 24.6 4.9 0:24.85 /opt/bitnami/php/bin/php.bin /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv
26415 bitnami 20 0 677532 475672 64588 R 23.6 4.9 1:36.11 /opt/bitnami/php/bin/php.bin /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv
Я также изменил кроны, чтобы они запускались каждые 5 минут, а не по умолчанию каждую минуту, но поведение остается прежним.
Мое последнее изменение состояло в чередовании каждые 7 минут и 8 минут с 2 заданиями cron: запускайте задания с интервалом 3 и 4 минуты, и при этом одновременно выполняется только 1 задание cron с 30% - 40% ЦП от MySQL.
На моем сайте сейчас тоже нет трафика, потому что я его еще не запустил пока. Является ли такое поведение нормальным для Magento, так как с сайтом ничего не происходит? Я позволяю ему сидеть в течение 12 часов, вообще ничего не делая, и когда я смотрю сверху, cron все еще работает и забивает MySQL.
ОБНОВЛЕНИЕ: Теперь ясно, что проблема заключается только в первом cron: запустите процесс, который вызывает проблемы. Я изменил 2-й и 3-й пункты обратно на каждую минуту и оставил первый на 8 минут, и есть только один запущенный процесс cron: запуск за раз. Из комментария под ним может возникнуть проблема с установками Bitnami Magento, но это мой первый опыт работы с Magento, поэтому я не знаю, является ли это ожидаемым поведением (я действительно надеюсь, что это не так).
1 answers
Обеспечение, по крайней мере, временного решения проблемы, чтобы избежать забивания вашего сервера MySQL. Проблема с Git, описывающая проблему
По крайней мере, часть проблемы сводится к таблице cron_schedule. Я бы рекомендовал сделать select count(*) from cron_schedule;
, и если это вернет больше нескольких сотен, то у вас проблема. Для меня этот запрос вернул 208,046 на сервере, который работает всего несколько недель.
Если у вас возникла проблема, выполните этот запрос, чтобы удалить все в эта таблица, за исключением последних строк delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour);
Затем снова запустите запрос count, и он должен быть waaaay ниже. Мой вырос с 208 тысяч до 252.
После выполнения этого запроса я возвращаю все 3 стандартных кроны к стандарту один раз в минуту, и, как по волшебству, все они запускаются почти мгновенно. Вернулся к нормальной жизни, насколько я могу судить.
В выпуске github другой пользователь предлагает добавить этот запрос в crontab, чтобы предотвратить повторное увеличение таблицы.
0 * * * * <path_to_mysql_bin_dir>/mysql <magento_db_name> -e "delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour)"
Последний ответ от Команда Magento по этой проблеме в сентябре заявила, что не может воспроизвести проблему, но ряд пользователей последовали за этим, заявив, что они испытывают то же самое, включая меня. Так что, надеюсь, они исправят это, чтобы этот взлом можно было удалить.
ИЗМЕНИТЬ: Чтобы использовать эту команду на вкладке crontab, вам нужно каким-то образом передать свои учетные данные в MySQL. Смотрите Мой комментарий ниже, если вы находитесь на выделенной виртуальной машине или сервере и хотите разместить своего пользователя/передать на crontab, в противном случае вам потребуется настроить учетные данные MySQL файл. И вы можете использовать which mysql
, чтобы найти путь к вашему двоичному каталогу mysql.