У меня есть папка над веб-корнем, которая используется для временного хранения пользовательских файлов, сгенерированных веб-приложением 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 "