我的 CakePHP 控制台腳本在 cron 下執行時出現問題。它抱怨缺少 Mysql 連線等。
經過一番調查後,我發現 cron 運行的 php 使用與我在終端機中運行它時不同的 php.ini 檔案。
更奇怪的是,在終端機中,php不使用cli配置:
PHP 在終端機中運作:
設定檔(php.ini)路徑:/usr/local/lib 載入的設定檔:/usr/local/lib/php.ini 掃描其他 .ini 檔:(無) 解析的其他 .ini 檔:(無)
PHP 透過 cron 運行:
設定檔(php.ini)路徑:/etc/php5/cli 載入的設定檔:/etc/php5/cli/php.ini 掃描以下位置的其他 .ini 檔案:/etc/php5/cli/conf.d 解析的其他 .ini 檔案:/etc/php5/cli/conf.d/memcache.ini, /etc/php5/cli/conf.d/mysql.ini, /etc/php5/cli/conf.d/mysqli.ini, /etc/php5/cli/conf.d/pdo.ini, /etc/php5/cli/conf.d/pdo_mysql.ini, /etc/php5/cli/conf.d/suhosin.ini, /etc/php5/cli/conf.d/xcache.ini
我不知道為什麼它不使用相同的配置文件。我沒有註意到ENV
終端機中的變數或作為 cron 運行時有任何特殊之處。
答案1
我不確定這是否是標準行為,但您可以隨時添加
-c /usr/local/lib/php.ini
到使用自訂配置的命令。
答案2
由於設定不同,您可能沒有php
在終端機和 cron 中使用相同的二進位PATH
。
輸入which php
終端並將php
二進位檔案的完整路徑放入 cron 腳本中。
答案3
我同意 Oliver 的觀點 - 你必須將 php 的完整路徑放入 cron 中。您也可以在 cron 檔案中包含 PATH 參數,但最好是 php 的絕對路徑。