Cron作业和文件夹权限 - 权限被拒绝

时间:2012-05-15 10:12:22

标签: php permissions cron

我在webroot上面有一个文件夹,用于临时存储php web应用程序生成的用户文件。例如,文件可能是将附加到电子邮件的PDF文件。

文件夹权限设置为rwxr-xr-x(0755)。从Web应用程序执行过程时,文件将被写入此文件夹而不会出现任何问题。

我现在还设置了一个调用php脚本的cron作业来执行与上面完全相同的过程。但是,由于权限失败,无法将PDF保存到上述文件夹中 - cron作业报告错误permission denied

我尝试将文件夹权限设置为0775并仍然获得权限被拒绝。但是,当权限为0777时,则cron作业可以正常工作。

这对我来说似乎很奇怪 - 为什么cron在0755获得了拒绝许可,但它通过网络应用程序运行良好?

4 个答案:

答案 0 :(得分:7)

可能的答案是cron作业在您的用户下执行 - 该目录由apache(或www-data或nobody或您的Web服务器运行的任何用户)拥有。

要使其正常工作,您可以将cron作业设置为以Web服务器用户身份运行。 像这样:

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

或者,您可以将权限更改为775(所有者和组的读写执行,以及其他人的读 - 执行),并将文件夹的组所有权设置为运行cron作业的用户。

但是,你必须确保如果你正在删除某些东西或者下载到由apache创建的文件夹中,你仍然会遇到问题(apache会创建一个它自己拥有的文件,而你的用户无法删除它然后,无论目录权限如何。

您还可以查看suphp或其他最新内容 - Web服务器进程在您的用户名下运行,具体取决于您的系统架构。

答案 1 :(得分:1)

允许用户组 - 每个人。这就是3个数字所表示的内容。

您的php脚本作为与cron作业不同的用户和组运行,因此他们会遵守不同的权限。

检查chownchgrp,或尝试使用同一用户运行cron作业。

答案 2 :(得分:1)

这取决于您定义了cronjob的用户。

如果你是root(不推荐)它应该可以工作。如果您是网络用户(例如ubuntu上的www-data),它也可以正常工作。

sudo su - www-data
crontab -e

答案 3 :(得分:0)

如果您使用cpanel运行php,您可以尝试这样的事情: “php /home/algo/public_html/testcron.php”...... 只需写:php(脚本的rute)/yourscritpt.php“