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__
是一个魔术常量,包含当前文件所在的目录。
经过一周的尝试,我不知道还能做什么。 我的网络服务器上有一个简单的 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__
是一个魔术常量,包含当前文件所在的目录。