我在webroot上面有一个文件夹,用于临时存储php web应用程序生成的用户文件。例如,文件可能是将附加到电子邮件的PDF文件。
文件夹权限设置为rwxr-xr-x(0755)。从Web应用程序执行过程时,文件将被写入此文件夹而不会出现任何问题。
我现在还设置了一个调用php脚本的cron作业来执行与上面完全相同的过程。但是,由于权限失败,无法将PDF保存到上述文件夹中 - cron作业报告错误permission denied
。
我尝试将文件夹权限设置为0775并仍然获得权限被拒绝。但是,当权限为0777时,则cron作业可以正常工作。
这对我来说似乎很奇怪 - 为什么cron在0755获得了拒绝许可,但它通过网络应用程序运行良好?
答案 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作业不同的用户和组运行,因此他们会遵守不同的权限。
检查chown
和chgrp
,或尝试使用同一用户运行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“