Правильный способ реализации графика / cron

Мне нужно добавить создание массовых объектов в Pimcore. Сначала я попробовал с вебом, но из-за большого размера набора, запрос занял много времени, а подход был отброшен на практике.

Затем я выбрал cron для планирования работы на более поздний период, но я получаю другую проблему. Как и в некоторых других приложениях RAD, pimcore генерирует часть кода автоматически в некоторых папках, таких как / website / var / version. Таким образом, эти папки автоматически получают разрешение веб-пользователя (в моем случае это пользователь apache).

Но скрипт My cron запускается обычным пользователем, который выполняет вызовы API Pimcore для создания объекта / данных, но не может записывать в папки из-за недостаточных прав доступа. Теперь у меня может быть один из двух вариантов.

  1. Запустите cron через пользователя apache, что по соображениям безопасности не очень.
  2. Дайте права на запись (chmod 777 нравится или добавьте моего пользователя в группу apache с помощью chown). Но Pimcore время от времени создает новые папки, когда управляется из браузера. Таким образом, у этих новых папок нет прав на запись с помощью cron-скрипта (разрешение не более 755, я получаю новые папки, которых недостаточно для групповой записи).

Я искал ранее в Google и нашел команду setfacl для установки пользователя по умолчанию / разрешения для папки. Который я использовал так.

    `sudo setfacl -Rm u:apache:rwx,d:u:apache:rwx website/var/versions/object`

Но это регулярно не удавалось, и мне нужно снова и снова давать разрешение вручную.

Теперь есть ли практический подход для исправления этого?

Примечание. В настоящее время я использую Amazon Linux AMI. Но позже он может быть изменен на redhat или ubuntu, так что лучше — это универсальное решение для Linux.

1

Решение

Pimcore уже требует, чтобы его задания по обслуживанию (cron) выполнялись под пользователем apache, поэтому если вы не запустите свое задание под пользователем apache, это может немного улучшить ситуацию.

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

Увидеть /pimcore/modules/reports/controllers/NewsletterController.php:194:

$cmd = Tool\Console::getPhpCli() . " " . realpath(PIMCORE_PATH . DIRECTORY_SEPARATOR . "cli" . DIRECTORY_SEPARATOR . "send-newsletter.php"). " " . escapeshellarg($letter->getName()) . " " . escapeshellarg(Tool::getHostUrl());
Tool\Console::execInBackground($cmd, PIMCORE_LOG_DIRECTORY . "/newsletter--" . $letter->getName() . ".log");

Над кодом запускается скрипт CLI /pimcore/cli/send-newsletter.php

При таком подходе cron не нужен, и поскольку задание запускается как CLI, оно не будет превышено по времени (если вы явно не установили время ожидания для PHP CLI).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]