PHP脚本没有运行www-data cron

时间:2016-08-17 13:51:39

标签: php cron privileges access

经过一周的尝试,我不知道还能做什么。 我有一个简单的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正在运行,所以我将cronjob更改为

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

再没有做任何事......所以我把它改成了

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

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

所以我认为问题必须是我的www-data用户的访问权限中的问题。它只是非常奇怪,因为我的所有webcontent(php文件,webapp usw。)也归www-data用户所有,并且运行顺畅。

我是否需要为www-data的cron提供额外的特权?

1 个答案:

答案 0 :(得分:2)

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

因此,您要么设置工作目录,要么使用“绝对”路径。例如:

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

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