Php 脚本不是 运行 www-data cron

Php script not running with www-data cron

经过一周的尝试,我不知道还能做什么。 我的网络服务器上有一个简单的 php 脚本,名为 getpoem.php 该脚本打开一个网站,提取其内容并将其保存到服务器

上的 poem.txt
<?php
    //File to extract the Poem of the day
    $homepage = file_get_contents('http://SomeWebsite.com/today.php');
    $poemALL = substr($homepage,strpos($homepage,"<p>"),strlen($homepage));
    .
    .  // extracting the poem and saving it to $poemFinish
    .
    file_put_contents("poem.txt", $poemFinish); ?>

所以这是一个相当简单的脚本(如果我手动执行它就可以正常工作)。这个脚本应该用 www-data 用户和它的 cron 来执行,所以我用这个命令打开了 cron 并输入了它应该 运行

的命令
sudo crontab -u www-data -e 

0 3 * * * php /var/www/html/getpoem.php

为了避免任何权限问题,我给了 getpoem.php 和 poem.txt rwx 权限(我知道我应该在它生效时更改它,但这只是为了测试)

-rwxrwxrwx 1 www-data www-data 1189 Aug 17 15:07 getpoem.php
-rwxrwxrwx 1 www-data www-data 1335 Aug 17 15:07 poem.txt

这是设置,但不会执行。

到目前为止我所做的是将 "php" 更改为 /usr/bin/php 以确保 cron 知道 php 是什么。 接下来我做的是确保 cron 是 运行ning,所以我将 cronjob 更改为

2 * * * */usr/bin/php /var/www/html/getpoem.php | > /var/www/html/test.txt

wich 又什么也没做....所以我将其更改为

2 * * * */usr/bin/php /var/www/html/getpoem.php | > /tmp/test.txt

没有 运行 php 文件,而是在我的 tmp 目录中创建了一个名为 test.txt 的空 (-.-") 文件。

所以我认为问题一定出在我的 www-data 用户的访问权限中。这非常奇怪,因为我所有的网络内容(php 文件,webapp usw。)也归 www-data 用户所有,他们 运行 顺利。

我需要为 www-data 的 cron 授予额外的权限吗?

当cron 运行 php时,您的工作目录通常不是文件所在的目录。写入文件时,它可能会尝试写入文件poem.txt 相对于通常不可写的 /

因此您要么设置工作目录,要么应该使用 "absolute" 路径。例如:

file_put_contents(__DIR__.'/poem.txt');

其中 __DIR__ 是一个魔术常量,包含当前文件所在的目录。