PHP 脚本未与 www-data cron 一起运行

问题描述 投票:0回答:1

经过一周的尝试,我不知道还能做什么。 我的网络服务器上有一个简单的 PHP 脚本,名为 getpoem.php。 该脚本打开一个网站,提取其内容并将其保存到服务器上的诗歌.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 和诗歌.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 用户的访问权限中。这很奇怪,因为我所有的网页内容(php 文件、webapp usw.)也归 www-data 用户所有,并且它们运行顺利。

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

php cron privileges
1个回答
2
投票

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

poem.txt
写入文件
/
,而该文件通常不可写。

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

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

其中

__DIR__
是一个神奇常量,包含当前文件所在的目录。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.