Мне нужно добавить создание массивных объектов в Pimcore. Сначала я пробовал с помощью Интернета, но из-за большого размера набора, запрос, взятый долгое время, и подход отброшен на практике.
Затем я выбрал cron для расписания работы на более поздний период, но у меня другая проблема. Как и некоторые другие приложения RAD, pimcore автоматически генерирует некоторый код в некоторых папках, таких как /website/var/versions. Таким образом, эти папки автоматически получают разрешение веб-пользователя (в моем случае apache пользователь).
Но мой скрипт cron, выполняемый обычным пользователем, который выполняет API Pimcore, вызывает создание объектов/данных, но не может писать в папках из-за недостаточных разрешений. Теперь у меня может быть один из двух вариантов.
Я искал ранее в google и нашел команду setfacl для установки по умолчанию пользователя/разрешений для папки. Что я использовал так.
'sudo setfacl -Rm u:apache:rwx,d:u:apache:rwx website/var/versions/object'
Но это не удалось, и мне нужно снова и снова разрешать вручную.
Теперь, если какой-либо практический подход для этого?
Примечание. В настоящее время я использую Amazon Linux AMI. Но это может быть позже изменено на redhat или ubuntu, поэтому лучше всего доступно универсальное решение linux.
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).