因此,我设置了一个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);
Run Code Online (Sandbox Code Playgroud)
这是我尝试运行cron作业时得到的输出:
www-data
PHP Warning: fopen(TEST_4e15266d09fa2.tst): failed to open stream: Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,当使用shell进行此操作时su www-data,脚本会执行得很好,并且不会打without地生成测试文件。
知道为什么会这样吗?
编辑:我猜su www-data可能是不必要的,因为php可以运行,但是它可以运行,但是我尝试过以防万一。www-data从输出中可以看到,cron和脚本的执行就像是执行一样。