2014-02-27 77 views
-1

我想獲得一個php腳本在crontab中運行,但是當在crontab中運行時,我得到一個來自php的包含錯誤。如何設置一個php腳本在crontab中運行?

crontab條目看起來像:

* * * * * php /path/sendEmail.php > /path/logs/sendEmail/sendEmail-`date +\%Y-\%m-\%H\ \%k:\%M:\%S`.log 2>&1 & 

然而,這將創建日誌文件,我得到一些PHP錯誤裏面的日誌文件:

PHP Warning: include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6 

Warning: include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6 
PHP Warning: include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6 

Warning: include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6 
PHP Fatal error: Class 'Database' not found in /path/sendEmail.php on line 9 

Fatal error: Class 'Database' not found in /path/sendEmail.php on line 9 

當我在crontab條目運行命令我在日誌文件中得到相同的錯誤。現在,當我在終端中運行php sendEmail.php時,它工作得很好。電子郵件發送和一切。在以前的情況下,我收到錯誤(並且電子郵件也不發送)。

不知道如何管道輸出似乎改變PHP腳本如何運行。任何想法如何獲得一個PHP腳本作爲cronjob運行?

+0

'echo getcwd();' – zerkms

+0

你有路徑問題,包含文件的方式不安全.. ../../../ lib/Database.php – meda

+0

有沒有更合適的方法包括這個文件? – thed0ctor

回答

1

當cron啓動腳本時,它的工作目錄不太可能與您的PHP腳本所在的目錄相同,因此至少在其當前形式下,相對路徑(如../../../lib/Database.php)是不可取的。

到腳本的頂部添加:

define('__SCRIPT_ROOT', dirname(__FILE__)); 

,改變你的包括了:

include_once(__SCRIPT_ROOT . '/../../../lib/Database.php'); 

現在__SCRIPT_ROOT包含腳本的絕對路徑,你可以使用它作爲一個基地執行相對路徑。

+0

謝謝!這解決了它。 – thed0ctor