首页 文章

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

提问于
浏览
3

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

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

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

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

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

4 回答

  • 1

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

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

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

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

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

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

  • 6

    许可给予用户组 - 每个人 . 这就是3个数字所表示的 .

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

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

  • 0

    这取决于您定义cronjob的用户 .

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

    sudo su - www-data
    crontab -e
    
  • 1

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

相关问题