![尝试将 PHP 脚本作为 CRONJOB 运行时出现权限问题](https://linux22.com/image/1004954/%E5%B0%9D%E8%AF%95%E5%B0%86%20PHP%20%E8%84%9A%E6%9C%AC%E4%BD%9C%E4%B8%BA%20CRONJOB%20%E8%BF%90%E8%A1%8C%E6%97%B6%E5%87%BA%E7%8E%B0%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98.png)
我正在运行 Ubuntu 16.04。我试图运行位于的 PHP 脚本/var/www/html/CronScripts/
作为 cronjob。此脚本所做的就是在同一目录中创建一个.txt
或.out
文件。以下是脚本:
<?php
$handle = fopen("theFileHandle.out", "a");
fwrite($handle, "The quick brown fox jumps over a lazy dog.\n");
fclose($handle);
?>
现在的问题是,当我通过在浏览器中打开并执行该脚本时,出现以下错误:
Warning: fopen(theFileHandle.out): failed to open stream: Permission denied in /var/www/html/CronScripts/index.php on line 3
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 4
Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 5
所以我的推断是,如果这个脚本运行如下sudo
,不会有权限问题;因为我最终要在 cronjob 中运行脚本,所以我在终端中执行了以下命令
sudo crontab -e
将下面的 cronjob 添加到sudo
用户的 crontab 文件。
* * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/output.out
此后,output.out
创建了一个名为“WAS”的文件,但它是空的。
然后从我的网络搜索中我得出结论,我正在将 cronjob 添加到 sudo 用户的 crontab 中,但是 apache2/php 由用户运行www-data
,所以这可能是问题所在。因此,我www-data
通过执行切换到用户su -s /bin/bash www-data
,然后在其 crontab 中添加* * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/out.out
,但输出日志文件out.out
从未创建。
所以我的问题是为什么我会遇到这个问题以及如何解决这个问题?