簡體   English   中英

PHP 腳本未與 www-data cron 一起運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM