簡體   English   中英

PHP 腳本在通過 CRON 作業運行時死亡

[英]PHP script dies when run via CRON job

首先讓我說我完全不是 PHP 程序員 - 這被傾倒在我身上來解決。

我有一個 function 本身位於一個文件中,基本上看起來像這樣:

<?php
function UploadFile($source, $destination){
   $debugLogPath = '/biglongpath/debug.log';
   file_put_contents($debugLogPath,PHP_EOL . "Beginning UploadFile function", FILE_APPEND);

    set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    require_once('Net/SFTP.php');

    ...Rest of the ftp code here...
}

?>

它使用 phpseclib。 如果我通過 web 瀏覽器運行主 PHP 腳本(調用此 function...),一切正常。 當我通過 CRON 作業運行相同的腳本時,它會在調用此 function 時立即死亡。 我已經通過在調用 function 之前寫出調試日志來驗證這一點 - function 之前的第一條語句被寫入日志,但從未寫入“開始 UploadFile 函數”。

我猜它可能與 require_once 語句有關 - 當它通過 CRON 執行時可能是路徑問題或權限問題?

我嘗試將整個 function 內容包裝在 try/catch 中並寫出異常,但它仍然會死掉。

我想知道為什么有 3 個有用的標志,當問題說明正在寫入文件時? 但是,這不是 CLI 錯誤日志,因此不會在那里自動記錄任何錯誤。
提出的第二個建議似乎更有可能,同時還有更多可能性:

確保正在為 PHP-CLI 加載這些模塊:

libsodiumopensslmcryptgmp (作為composer.json提示)。

運行php --ini應該顯示加載了哪些 INI 文件。 即使有相應的 INI 文件,也要確保其中的指令沒有用;注釋掉。 .

從 CLI 手動運行腳本,作為運行 cronjob 的用戶建議,啟用錯誤報告。 如果這無濟於事,請使用xdebug單步執行,看看它到底出在哪里(NetBeans、Eclipse、VS Code 和其他一些 IDE 確實支持 Z2FEC3923284AC23AC7CZFDA 調試)。 這需要一些努力來設置它,但它提供了一種更好的調試方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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