首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Linux 定時任務執行 PHP 腳本:crontab 完整設定指南

     編輯:PHP 相關知識

核心概念

Linux cron daemon 每分鐘檢查 crontab 排程表,到時執行指定指令。PHP CLI 模式執行腳本,無需 Web Server。

PHP CLI 執行基礎

# 安裝 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:指定檔案 (可省略)。
  • 腳本頂端可加 Shebang:#!/usr/local/bin/php,賦予執行權限後直接 /path/script.php 執行。

crontab 設定指令

crontab -e    # 編輯當前用戶排程 (vi 編輯器)
crontab -l    # 列出排程
crontab -r    # 刪除所有排程

排程時間格式 (5 欄位 + 指令)

* * * * *  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

環境變數與常見坑

  • PATH 最小化:cron 環境極精簡,腳本內所有指令 (mysqldump, php, curl) 必須用絕對路徑。
  • 資料庫連線:Oracle/PostgreSQL 等需 export ORACLE_HOME=...; export LD_LIBRARY_PATH=... 在腳本開頭或包裝腳本設定。
  • 工作目錄:cron 執行目錄通常是用戶家目錄,腳本需 chdir(__DIR__) 或用絕對路徑存取檔案。
  • 輸出導向:標準輸出/錯誤導向日誌檔 (>> /var/log/xxx.log 2>&1),否則會寄信給用戶 (需郵件系統)。
  • 鎖機制:長時間任務防重複執行,使用 flock 或檔案鎖。

系統級 vs 用戶級 crontab

/etc/crontab          # 系統級,需指定用戶欄位:分 時 日 月 週 user command
/etc/cron.d/          # 系統級片段檔案目錄
/var/spool/cron/      # 用戶級 crontab 儲存位置

結語

crontab + PHP CLI 是 Linux 伺服器自動化運維的經典組合。掌握時間格式、環境隔離、日誌記錄、防重複執行等細節,能建立穩定可靠的排程任務系統。現代替代方案包括 systemd timers、Jenkins/GitLab CI、Laravel Scheduler、Kubernetes CronJob 等,視架構複雜度選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved