Разрешения на работу и папки Cron – разрешение отклонено

У меня есть папка над веб-корнем, которая используется для временного хранения пользовательских файлов, сгенерированных веб-приложением php. Файлы могут быть, например, PDF-файлами, которые будут прикреплены к электронным письмам.

Разрешения папки установлены на rwxr-xr-x (0755). При выполнении процедуры из веб-приложения файлы записываются в эту папку без каких-либо проблем.

Теперь я также создал задание cron, которое вызывает скрипт php для выполнения той же процедуры, что и выше. Однако PDF не может быть сохранен в указанную выше папку из-за неудачных разрешений – задание cron сообщает об permission denied в permission denied .

Я попытался установить права доступа к папке на 0775 и все еще получить отказ в доступе. Однако, когда разрешения – 0777, тогда задание cron работает отлично.

Это кажется мне очень странным – почему cron получает разрешение, отклоненное в 0755, но оно отлично работает через веб-приложение?

Вероятный ответ заключается в том, что задание cron выполняется под вашим пользователем – и каталог принадлежит apache (или www-data или никому или другому пользователю, на котором работает ваш веб-сервер).

Чтобы заставить его работать, вы можете настроить задание cron для работы в качестве пользователя веб-сервера. Что-то вроде этого:

 su -l www-data -c 'crontab -e' 

В качестве альтернативы вы можете изменить разрешения на 775 (read-write-execute для владельца и группы, а также прочитать-выполнить для других) и установить групповое владение папкой для пользователя, выполняющего задание cron.

Однако вы должны убедиться, что если вы удаляете что-то или спускаетесь в папку, созданную apache, вы все равно можете столкнуться с проблемами (apache создаст файл, который он сам владеет, и ваш пользователь не сможет его удалить, независимо от того, разрешений каталога.

Вы также можете посмотреть некоторые вещи, такие как suphp или что-то новое – где процессы веб-сервера запускаются под вашим именем пользователя, в зависимости от вашей системной архитектуры.

Разрешение предоставляется группе пользователей-всем. Это то, что обозначают 3 числа.

Ваш php-скрипт работает как другой пользователь и группа, чем задание cron, поэтому они наблюдают разные разрешения.

Проверьте chown и chgrp или попробуйте запустить задание cron с тем же пользователем.

Это зависит от того, какой пользователь вы определили cronjob.

Если вы root (не рекомендуется), он должен работать. Если вы являетесь веб-пользователем (например, www-data на ubuntu), он также должен работать.

 sudo su - www-data crontab -e 

если вы используете cpanel для запуска php, вы можете попробовать что-то вроде этого: «php /home/algo/public_html/testcron.php» … просто напишите: php (rute of the script) /yourscritpt.php "