2016-10-05 57 views
0

我想在linux localhost下每隔1分鐘使用cronjob更新一個mysql表,但沒有成功。我正在使用wordpress與數據庫建立連接。我迄今所做的:沒有從本地主機使用crontab的cronjob結果

在終端我用開的crontab:

crontab -e 

和類型:

*/1 * * * * /usr/bin/php /var/www/.../myscript.php 

我保存的更改,並檢查在/ var /線軸/ cron中的文件/ crontabs中。 myscript.php的

內容:

<?php 
$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
$url = $_SERVER['REQUEST_URI']; 
$my_url = explode('wp-content' , $url); 
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0]; 

include_once $path . '/wp-config.php'; 
include_once $path . '/wp-includes/wp-db.php'; 
include_once $path . '/wp-includes/pluggable.php'; 

global $wpdb; 

$wpdb->query("INSERT INTO mytable (id) VALUES ('1')"); 

?> 

當我運行從瀏覽器myscript.php,表得到更新。我究竟做錯了什麼?

+1

有你'在/ usr/bin中/ php'試過嗎? - 另外,你可以經常看到系統日誌中的錯誤(最有可能),位於:'/ var/log/syslog' – Epodax

+0

你是什麼意思? – Student

+0

你的工作缺少第一個'/' – Farkie

回答

0

你意識到你沒有web服務器,並且因爲$ _SERVER變量不會有SERVER_NAME和REQUEST_URI嗎?

由於$ path永遠不會被正確填寫,並且您的所需文件將不會加載。

通常你會看到一些通知(如果情況並非如此,你的php.ini配置不是很好),但代碼仍然應該運行。只有$path只持有'/',並因此加載從服務器根目錄中的所有內容。
文件不存在,所以它不起作用。

如果您需要以這種方式來判斷您的路徑(在瀏覽時),您需要確定您是在瀏覽還是在CLI中運行它。
比如這個:

if (php_sapi_name() === 'cli') { 
    $path = 'PATH THAT YOU KNOW, probably /var/www'; 
} else { 
    $url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
    $url = $_SERVER['REQUEST_URI']; 
    $my_url = explode('wp-content' , $url); 
    $path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0]; 
} 
+0

你是對的兄弟 – Student