允许拒绝或尝试以CRONJOB作为CRONJOB运行PHP脚本以创建.txt文件时的某些内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了允许拒绝或尝试以CRONJOB作为CRONJOB运行PHP脚本以创建.txt文件时的某些内容相关的知识,希望对你有一定的参考价值。

我正在运行Ubuntu 16.04。我正在尝试运行位于var/www/html/CronScripts/php脚本作为cronjob。所有这个脚本都在同一目录中创建一个.txt.out文件。这是脚本:

 <?php 

$handle = fopen("theFileHandle.out", "a");
fwrite($handle, "The quick brown fox jumps over a lazy dog.
");
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

将以下cron作业添加到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

所以我的问题是为什么我要面对这个问题,我该如何解决这个问题呢?

答案

最初的问题似乎是用户www-data(执行apache的那个,所以php脚本)没有权限在目录中写入。您可以使用chown和chmod解决这个问题,允许读取和写入此目录中的www-data用户。

该解决方案可能存在安全问题,请考虑使用apache服务器范围之外的目录(例如/ varr / www / anotherplace),并确保不对脚本创建的文件赋予执行权限。

以上是关于允许拒绝或尝试以CRONJOB作为CRONJOB运行PHP脚本以创建.txt文件时的某些内容的主要内容,如果未能解决你的问题,请参考以下文章

监控 GKE 上运行的 Cronjob

如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数

将简单的 shell 脚本作为 cronjob 运行

每 10 分钟 cronjob 进行文件转换

Google API 客户端和 Cronjob

使用cpanel在codeigniter中的cronjob