Linux cron daemon 每分鐘檢查 crontab 排程表,到時執行指定指令。PHP CLI 模式執行腳本,無需 Web Server。
# 安裝 PHP 時產生的執行檔複製到 PATH 目錄
cp /usr/local/php/bin/php /usr/local/bin/php
# 執行腳本 ( -q 抑制 HTTP Header 輸出 )
php -q /path/to/script.php
-q:安靜模式,不輸出 Content-type: text/html 等 Header。-f:指定檔案 (可省略)。#!/usr/local/bin/php,賦予執行權限後直接 /path/script.php 執行。crontab -e # 編輯當前用戶排程 (vi 編輯器)
crontab -l # 列出排程
crontab -r # 刪除所有排程
* * * * * command
分 時 日 月 週
| 欄位 | 範圍 | 特殊符號 |
|---|---|---|
| 分鐘 | 0-59 | * (每分鐘), */5 (每5分), 1,15,30 (列舉) |
| 小時 | 0-23 | * (每小時), 2-6 (範圍) |
| 日期 | 1-31 | * (每日), L (月末) |
| 月份 | 1-12 | * (每月), JAN-DEC (別名) |
| 星期 | 0-7 (0/7=週日) | * (每週), MON-SUN |
# 每天 02:30 備份資料庫
30 2 * * * /usr/local/bin/php /home/scripts/backup_db.php >> /var/log/backup.log 2>&1
# 每小時第 1 分鐘清理暫存檔
1 * * * * /usr/local/bin/php /home/scripts/cleanup_temp.php
# 每週一 04:00 產生週報
0 4 * * 1 /usr/local/bin/php /home/scripts/weekly_report.php
# 每月 1 號 00:00 重建索引
0 0 1 * * /usr/local/bin/php /home/scripts/reindex.php
# 開機後 5 分鐘執行一次 (@reboot 需 cron 支援)
@reboot sleep 300 && /usr/local/bin/php /home/scripts/startup.php
export ORACLE_HOME=...; export LD_LIBRARY_PATH=... 在腳本開頭或包裝腳本設定。chdir(__DIR__) 或用絕對路徑存取檔案。>> /var/log/xxx.log 2>&1),否則會寄信給用戶 (需郵件系統)。flock 或檔案鎖。/etc/crontab # 系統級,需指定用戶欄位:分 時 日 月 週 user command
/etc/cron.d/ # 系統級片段檔案目錄
/var/spool/cron/ # 用戶級 crontab 儲存位置
crontab + PHP CLI 是 Linux 伺服器自動化運維的經典組合。掌握時間格式、環境隔離、日誌記錄、防重複執行等細節,能建立穩定可靠的排程任務系統。現代替代方案包括 systemd timers、Jenkins/GitLab CI、Laravel Scheduler、Kubernetes CronJob 等,視架構複雜度選擇。