首页 文章

PHP Cronjob - 权限被拒绝?

提问于
浏览
2

所以,我设置了一个cronjob来运行以下命令:

php /var/www/path/to/cron/do-stuff.php

路径是正确的 . 该目录归 www-data 所有 .

该脚本执行以下操作:

chdir( getcwd() );
echo shell_exec('whoami');

$handle = fopen(uniqid('TEST_') . '.tst');
fwrite($handle, 'foo');
fclose($handle);

这是我在尝试运行cron作业时得到的输出:

www-data
PHP Warning:  fopen(TEST_4e15266d09fa2.tst): failed to open stream: Permission denied

然而,当使用 su www-data 从shell执行此操作时 - 脚本执行得很好并生成测试文件而没有打嗝 .

知道为什么会这样吗?

编辑:我想 su www-data 可能是不必要的,因为php会运行,但它运行,但我试过以防万一 . 然而,正如您从输出中看到的那样,cron和脚本执行为 www-data .

3 回答

  • 4

    您是否尝试将完整路径放在fopen函数中而不仅仅是文件名?

  • 0

    cron作业以完全不同的方式处理PATH . 如果您没有指定PATH,那么当从命令行调用它时通常工作的相同脚本可能会在从crontab调用时返回这样的权限错误 .

    尝试更改该行:

    $handle = fopen(uniqid('TEST_') . '.tst');
    

    在这样的事情:

    $handle = fopen('/var/www/vhosts/yourpath/'.uniqid('TEST_') . '.tst');
    

    它对我有用 .

  • 2

    我有信心即使这是一个cron,PHP本身仍然作为它的默认用户运行(当然这可能会有所不同),这是不能合理地改变的 . 我可能错了 . 尝试将目录分组到PHP系统用户(apache?)并授予组写权限 . 然后看看是否有效 .

相关问题