[英]PHP: Create a cron file in a directory owned by root? (Running as www-data)
[英]Php script not running with www-data cron
經過一周的嘗試,我不知道還能做什么。 我的網絡服務器上有一個簡單的 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 和 Pom.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 用戶的訪問權限中。 這只是非常奇怪,因為我所有的 web 內容(php 文件,webapp usw。)也歸 www-data 用戶所有,並且它們運行順利。
我需要為 www-data 的 cron 授予額外的特權嗎?
當從 cron 運行 php 時,您的工作目錄通常不是文件所在的目錄。在寫入文件時,它可能會嘗試寫入相對於/
的文件poem.txt
通常不可寫。
因此,您要么設置工作目錄,要么應該使用“絕對”路徑。 例如:
file_put_contents(__DIR__.'/poem.txt');
其中__DIR__
是一個魔術常量,包含當前文件所在的目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.