cPanel Cron Jobs 可以讓主機在固定時間執行網站維護、報表、資料同步或程式內建的排程腳本。設定時真正重要的不是背下 cron 表達式,而是確認執行時間、絕對路徑、執行結果與重複執行風險。
這篇只用 cPanel 介面與安全的 PHP 腳本範例。你不需要先會管理整台 Linux 伺服器,也不會用到刪除資料的危險指令。
你會學到什麼
- 知道 Cron Job 適合與不適合處理哪些工作。
- 看懂分鐘、時、日、月、星期五個欄位。
- 從 cPanel 建立一筆可追查的排程。
- 使用完整的 PHP 與腳本絕對路徑。
- 透過 Log、通知與時間戳驗證排程真的執行。
- 避免工作尚未完成,下一輪又被啟動。
開始設定前先確認
- 你能正常登入 cPanel;需要時先看cPanel 登入教學。
- 主機方案有開放 Advanced → Cron Jobs。cPanel 官方說明此功能可由主機商啟用或停用。
- 你已經知道要執行哪個腳本,以及腳本由誰維護。
- 腳本可以先手動測試,而且不會因重複執行就重複扣款、寄信或新增資料。
- 你知道主機採用的時區。不要只用自己電腦的台北時間猜測。
- 正式站修改前已完成可用備份,可參考cPanel 網站備份與還原教學。
Cron Job 是什麼
Cron Job 是系統依照指定時間執行的排程任務。它適合處理:
- 每晚產生網站報表。
- 每 15 分鐘處理待同步資料。
- 每天執行應用程式提供的維護腳本。
- 定期觸發網站本身已設計好的背景工作。
它不適合把一個很重的工作硬設成每分鐘執行,也不適合直接塞入你看不懂、來源不明的指令。Cron 只負責按時間啟動;腳本是否安全、可重複執行、會不會同時跑兩份,仍是程式本身與管理者的責任。
五個 Cron 時間欄位怎麼看
一筆標準 Cron 排程依序有五個時間欄位:
分鐘 小時 日期 月份 星期
| 欄位 | 常見範圍 | * 的意思 | 範例 |
|---|---|---|---|
| 分鐘 Minute | 0–59 | 每分鐘 | 0 代表整點 |
| 小時 Hour | 0–23 | 每小時 | 2 代表 02:00 |
| 日期 Day | 1–31 | 每天 | 1 代表每月 1 日 |
| 月份 Month | 1–12 | 每月 | 6 代表 6 月 |
| 星期 Weekday | 0–7,實際介面可選 | 每天 | 1-5 常用來表示週一到週五 |
常見排程:
| 需求 | 表達式 | 白話說明 |
|---|---|---|
| 每天凌晨 2 點 | 0 2 * * * | 每天 02:00 執行 |
| 每 15 分鐘 | */15 * * * * | 每小時的 00、15、30、45 分執行 |
| 每週一上午 9:30 | 30 9 * * 1 | 星期一 09:30 執行 |
| 每月 1 日凌晨 3 點 | 0 3 1 * * | 每月第一天 03:00 執行 |
新手優先使用 cPanel 的 Common Settings 下拉選單。它會自動填入時間欄位,能降低欄位順序填錯的機率。
先找出正確的絕對路徑
cPanel 官方 Cron Jobs 文件要求在 Command 使用要執行項目的絕對路徑。Cron 啟動時的工作環境不像你手動登入後的 Terminal,不能假設它會自動找到 PHP、腳本或目前目錄。
例如,這些才是完整路徑的形式:
/usr/local/bin/php
/home/USERNAME/public_html/scripts/daily-report.php
/home/USERNAME/logs/daily-report.log
USERNAME 必須換成你的 cPanel 使用者名稱。PHP 執行檔位置也可能因主機環境與 PHP 版本而不同,不要直接假設每台主機都是 /usr/local/bin/php。
你可以用以下方式確認:
- 從 cPanel 首頁或帳號資訊找到 Home Directory。
- 到 Files → File Manager 找到腳本。
- 確認腳本放在預期目錄,沒有打錯大小寫。
- 向主機商或開發者確認應使用的 PHP 執行檔完整路徑。
- 若腳本不需要被公開瀏覽,請開發者評估放在
public_html之外。
不熟悉 File Manager 時,可先看cPanel 檔案管理員教學。
在 cPanel 新增第一筆 Cron Job
以下用「每天凌晨 2 點執行 PHP 報表腳本」為例。路徑只是格式示範,請換成主機商與程式提供的真實值。
步驟一:進入 Cron Jobs
- 登入 cPanel。
- 找到 Advanced 區塊。
- 點選 Cron Jobs。
- 先確認頁面下方是否已有相同工作,避免重複建立。
步驟二:設定 Cron Email
頁面上方的 Cron Email 可以接收排程輸出。建議填一個真的有人查看、而且不依賴同一故障網域的管理信箱。
如果程式每次都輸出大量一般訊息,信件會很吵;如果一開始就完全關閉通知,又可能錯過錯誤。比較穩妥的做法是先保留可追查的 Log,確認穩定後再決定通知策略。
步驟三:選擇執行時間
在 Add New Cron Job:
- Common Settings 選 Once Per Day,或手動填入時間。
- Minute 填
0。 - Hour 填
2。 - Day、Month、Weekday 保持
*。
正式儲存前,再把它念一次:「每天、凌晨 2 點、0 分執行」,比只盯著符號更容易抓出錯誤。
步驟四:填入 Command
先在 File Manager 建立或確認 /home/USERNAME/logs/ 目錄存在,再填入:
/usr/local/bin/php /home/USERNAME/public_html/scripts/daily-report.php >> /home/USERNAME/logs/daily-report.log 2>&1
這行分成四段:
| 片段 | 用途 |
|---|---|
/usr/local/bin/php | PHP 執行檔的絕對路徑 |
/home/USERNAME/public_html/scripts/daily-report.php | 要執行的 PHP 腳本 |
>> /home/USERNAME/logs/daily-report.log | 把一般輸出附加到 Log |
2>&1 | 把錯誤輸出也寫進同一份 Log |
使用 >> 會持續附加內容,因此要安排合理的 Log 保留或輪替。不要放著無限成長,否則最後可能吃滿網站空間。
步驟五:新增並核對
- 點選 Add New Cron Job。
- 在 Current Cron Jobs 找到新項目。
- 確認五個時間欄位與 Command 沒有被截斷或打錯。
- 記錄新增日期、用途、腳本負責人與預期輸出。
新排程怎麼安全驗證
不要只看到「新增成功」就當作工作正常。至少完成以下驗證。
先讓開發者手動測試腳本
確認同一支腳本在主機環境中能完成工作,且:
- 不需要互動輸入。
- 找得到設定檔與相依套件。
- 錯誤時會輸出可理解的訊息。
- 重跑不會重複建立不可逆資料。
如果你不熟悉 PHP 或程式邏輯,不要為了測試而直接修改正式腳本。
暫時使用容易觀察的排程
測試時可以暫時選一個稍後會發生、但不會過密的時間。看到它成功執行後,再改回正式時段。不要把重型工作改成每分鐘,只為了快點看到結果。
查看 Log 與結果
排程時間過後,到 File Manager 檢查:
daily-report.log的修改時間是否更新。- Log 是否有 PHP 錯誤或「找不到檔案」。
- 報表、資料或應用程式狀態是否真的改變。
- 同一時段是否重複執行兩次。
如果腳本本來就不輸出內容,請開發者在應用程式內留下開始、完成、失敗與工作識別碼等可追查紀錄。
排程頻率怎麼決定
先回答三個問題:
- 工作多久需要完成一次?
- 正常執行要花多久?
- 上一輪還沒完成時,下一輪能不能安全開始?
cPanel 官方提醒,要讓相鄰排程之間保留足夠時間;如果設定過密,前一個工作未完成,系統可能再啟動一份,進而降低效能。
| 工作 | 起始建議思路 |
|---|---|
| 每日報表 | 安排在低流量時段,每天一次 |
| 資料同步 | 先依業務可接受延遲決定 15 分鐘、每小時或每天 |
| 大量圖片處理 | 小批次、保留 Log,避免尖峰時間 |
| 備份 | 先確認空間、完成時間與主機既有備份不衝突 |
| WordPress 背景工作 | 依網站與外掛官方方式設定,不要同時保留兩套重複觸發 |
遇到網站固定時段變慢,可搭配cPanel 網站資源用量監控教學比對排程時間、CPU、記憶體與 Entry Processes。
Cron Email、Log 與靜默輸出怎麼選
| 做法 | 適合情況 | 注意事項 |
|---|---|---|
| 保留 Cron Email | 工作很少、只在錯誤時輸出 | 先確認腳本不會每次都輸出一般訊息 |
| 寫入專用 Log | 新工作、需要稽核與排錯 | 要設定保留與輪替,避免 Log 無限增長 |
| 交給應用程式監控 | 正式系統已有工作狀態與告警 | 要確認真的有失敗通知,不只是 Dashboard |
導向 /dev/null 2>&1 | 已穩定且另有可靠監控 | 會丟棄輸出,不適合剛上線就使用 |
cPanel 官方文件提供 /dev/null 2>&1 作為單筆工作停止寄送輸出的方式。但「不寄信」不等於「不需要監控」,你仍應保留應用程式 Log、工作狀態或其他失敗告警。
常見問題與排錯
Cron Job 完全沒有執行
依序確認:
- Current Cron Jobs 裡是否真的存在。
- 時間欄位與主機時區是否正確。
- PHP 與腳本是否都使用絕對路徑。
- 檔名大小寫是否完全相同。
- 腳本權限與主機方案是否允許執行。
- Log 或 Cron Email 是否有錯誤。
手動執行成功,Cron 卻找不到檔案
最常見原因是依賴目前目錄或環境變數。Cron 的環境可能比互動式操作精簡,腳本裡引用其他檔案時也應由開發者使用穩定路徑,不能只修 Command 表面。
工作重複執行
先檢查:
- 是否在 Current Cron Jobs 建立了兩筆。
- WordPress、外掛或外部排程服務是否也在觸發同一工作。
- 前一次是否還沒完成。
- 程式是否有鎖定或防重複處理設計。
涉及訂單、扣款、寄信或資料匯入時,防重複設計尤其重要。
Log 一直變大
先查明程式為什麼持續輸出,再設定 Log rotation 或保留週期。不要只靠定期清空掩蓋重複錯誤。也可以閱讀網站空間、月流量與 Inode 入門判斷 Log 對空間與檔案用量的影響。
上線前檢查表
- 腳本用途與負責人清楚。
- PHP 與腳本使用真實的絕對路徑。
- 時區已確認。
- 排程間隔長於工作最長執行時間,或程式已有防重複鎖。
- 工作可以安全重跑,或有防重複機制。
- 新工作先保留 Log 或通知。
- Log 目錄存在,且有保留或輪替策略。
- 已驗證實際結果,不只看到 cPanel 顯示新增成功。
- 沒有與 WordPress、外掛或外部排程重複。
- 正式資料已有可用備份。
下一步
Cron Job 是 cPanel 虛擬主機很實用的自動化工具,但它應該配合程式本身的維護方式,不是把所有伺服器管理工作都塞進一行 Command。
如果你要架設 WordPress、公司官網或需要 cPanel 排程功能,可先看侃瑞科技 cPanel 虛擬主機;不確定腳本路徑、頻率或方案是否支援,可從聯絡侃瑞科技提供腳本用途與預計執行頻率。我們會先確認能否安全執行,再決定設定方式。