【问题标题】:Cron job and folders permissions - permission deniedCron 作业和文件夹权限 - 权限被拒绝
【发布时间】:2019-09-19 02:39:33
【问题描述】:

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

文件夹权限设置为 rwxr-xr-x (0755)。从 Web 应用程序执行过程时,文件会毫无问题地写入此文件夹。

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

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

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

【问题讨论】:

    标签: php permissions cron


    【解决方案1】:

    权限被授予 user-group-everybody。这就是这 3 个字符的含义。

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

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

    【讨论】:

      【解决方案2】:

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

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

      sudo su - www-data
      crontab -e
      

      【讨论】:

        【解决方案3】:

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

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

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

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

        但是,您必须确保如果您要删除某些内容或进入 apache 创建的文件夹,您仍然可能会遇到问题(apache 会创建一个它自己拥有的文件,并且您的用户无法删除它然后,无论目录权限如何。

        您还可以查看一些东西,例如 suphp 或任何最新的东西 - Web 服务器进程在您的用户名下运行,具体取决于您的系统架构。

        【讨论】:

        • 嘿,我正在尝试从无法访问的 cronjob 执行的 PHP 脚本中访问 /var/log/httpd/domains/。我不认为我应该更改日志目录的权限,但我不确定我是否理解关于su -l www-data -c 'crontab -e' 的行。它具体有什么作用? (我正在尝试了解如何更改通过 DirectAdmin 创建的 cronjob 的权限)
        • su -l www-data 尝试以www-data 用户的身份执行某些操作。 -c 表示执行以下命令。 'crontab -e' 是要执行的命令。这一切都将通过命令行完成。也可以通过脚本操作cron,有现成的libs和helpers,google了一下。
        【解决方案4】:

        如果你使用 cpanel 来运行一个 php,你可以尝试这样的事情: “php /home/algo/public_html/testcron.php” ... 只需写:php(脚本的规则)/yourscritpt.php"

        【讨论】:

          猜你喜欢
          • 2020-04-30
          • 2016-05-18
          • 1970-01-01
          • 2017-05-18
          • 1970-01-01
          • 2012-11-24
          • 1970-01-01
          • 2011-10-01
          相关资源
          最近更新 更多