cPanel Cron Jobs 教學:安全設定網站排程任務

從 cPanel 圖形介面建立 Cron Job,教你看懂五個時間欄位、使用 PHP 與腳本的絕對路徑、保留執行紀錄並驗證結果,避免排程過密、重複執行或找不到檔案。

cPanelCron Jobscron job排程任務定時執行PHP排程crontab絕對路徑網站維護主機教學新手教學

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 排程依序有五個時間欄位:

分鐘  小時  日期  月份  星期
欄位常見範圍* 的意思範例
分鐘 Minute0–59每分鐘0 代表整點
小時 Hour0–23每小時2 代表 02:00
日期 Day1–31每天1 代表每月 1 日
月份 Month1–12每月6 代表 6 月
星期 Weekday0–7,實際介面可選每天1-5 常用來表示週一到週五

常見排程:

需求表達式白話說明
每天凌晨 2 點0 2 * * *每天 02:00 執行
每 15 分鐘*/15 * * * *每小時的 00、15、30、45 分執行
每週一上午 9:3030 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

你可以用以下方式確認:

  1. 從 cPanel 首頁或帳號資訊找到 Home Directory。
  2. Files → File Manager 找到腳本。
  3. 確認腳本放在預期目錄,沒有打錯大小寫。
  4. 向主機商或開發者確認應使用的 PHP 執行檔完整路徑。
  5. 若腳本不需要被公開瀏覽,請開發者評估放在 public_html 之外。

不熟悉 File Manager 時,可先看cPanel 檔案管理員教學

在 cPanel 新增第一筆 Cron Job

以下用「每天凌晨 2 點執行 PHP 報表腳本」為例。路徑只是格式示範,請換成主機商與程式提供的真實值。

步驟一:進入 Cron Jobs

  1. 登入 cPanel。
  2. 找到 Advanced 區塊。
  3. 點選 Cron Jobs
  4. 先確認頁面下方是否已有相同工作,避免重複建立。

步驟二:設定 Cron Email

頁面上方的 Cron Email 可以接收排程輸出。建議填一個真的有人查看、而且不依賴同一故障網域的管理信箱。

如果程式每次都輸出大量一般訊息,信件會很吵;如果一開始就完全關閉通知,又可能錯過錯誤。比較穩妥的做法是先保留可追查的 Log,確認穩定後再決定通知策略。

步驟三:選擇執行時間

Add New Cron Job

  1. Common Settings 選 Once Per Day,或手動填入時間。
  2. Minute 填 0
  3. Hour 填 2
  4. 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/phpPHP 執行檔的絕對路徑
/home/USERNAME/public_html/scripts/daily-report.php要執行的 PHP 腳本
>> /home/USERNAME/logs/daily-report.log把一般輸出附加到 Log
2>&1把錯誤輸出也寫進同一份 Log

使用 >> 會持續附加內容,因此要安排合理的 Log 保留或輪替。不要放著無限成長,否則最後可能吃滿網站空間。

步驟五:新增並核對

  1. 點選 Add New Cron Job
  2. Current Cron Jobs 找到新項目。
  3. 確認五個時間欄位與 Command 沒有被截斷或打錯。
  4. 記錄新增日期、用途、腳本負責人與預期輸出。

新排程怎麼安全驗證

不要只看到「新增成功」就當作工作正常。至少完成以下驗證。

先讓開發者手動測試腳本

確認同一支腳本在主機環境中能完成工作,且:

  • 不需要互動輸入。
  • 找得到設定檔與相依套件。
  • 錯誤時會輸出可理解的訊息。
  • 重跑不會重複建立不可逆資料。

如果你不熟悉 PHP 或程式邏輯,不要為了測試而直接修改正式腳本。

暫時使用容易觀察的排程

測試時可以暫時選一個稍後會發生、但不會過密的時間。看到它成功執行後,再改回正式時段。不要把重型工作改成每分鐘,只為了快點看到結果。

查看 Log 與結果

排程時間過後,到 File Manager 檢查:

  • daily-report.log 的修改時間是否更新。
  • Log 是否有 PHP 錯誤或「找不到檔案」。
  • 報表、資料或應用程式狀態是否真的改變。
  • 同一時段是否重複執行兩次。

如果腳本本來就不輸出內容,請開發者在應用程式內留下開始、完成、失敗與工作識別碼等可追查紀錄。

排程頻率怎麼決定

先回答三個問題:

  1. 工作多久需要完成一次?
  2. 正常執行要花多久?
  3. 上一輪還沒完成時,下一輪能不能安全開始?

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 完全沒有執行

依序確認:

  1. Current Cron Jobs 裡是否真的存在。
  2. 時間欄位與主機時區是否正確。
  3. PHP 與腳本是否都使用絕對路徑。
  4. 檔名大小寫是否完全相同。
  5. 腳本權限與主機方案是否允許執行。
  6. 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 虛擬主機;不確定腳本路徑、頻率或方案是否支援,可從聯絡侃瑞科技提供腳本用途與預計執行頻率。我們會先確認能否安全執行,再決定設定方式。

官方參考資料

準備替網站選主機?

先確認網站數量、容量、Email 與維護方式,再選單一網域、多網域或其他主機方案。