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

Linux 系統下使用 Crontab 定時執行 PHP 腳本完整教學

     編輯:PHP 綜合知識

前言

在 Linux 伺服器上定時執行 PHP 腳本(如資料備份、報表產生、郵件發送、快取清理)是常見的運維需求。Crontab 是 Linux 內建的排程器,功能強大且輕量。本文詳細說明設定步驟、常見陷阱與進階寫法。

基本設定步驟

1. 編輯排程表

crontab -e

首次執行會詢問選擇編輯器(建議選 vim 或 nano)。

2. 加入排程規則

在編輯器中新增一行:

0 * * * * /usr/bin/php -f /home/userxxx/update.php

3. 存檔離開

:wq (vim) 或 Ctrl+O, Enter, Ctrl+X (nano)。系統會自動載入新規則。

關鍵細節:必須使用 PHP 完整路徑

錯誤寫法: 0 * * * * php -f /home/userxxx/update.php
正確寫法: 0 * * * * /usr/bin/php -f /home/userxxx/update.php

原因:Cron 執行環境不載入使用者的 PATH 環境變數,無法找到 php 指令。使用 which php 確認完整路徑。

Crontab 時間欄位詳細說明

欄位說明允許值
MIN分鐘0-59
HOUR小時0-23
DOM日期1-31
MON月份1-12
DOW星期0-6 (0=星期日)
CMD執行指令任意合法指令

進階時間表示法

符號用途範例含義
*任意值* * * * *每分鐘執行
-範圍0 0-6 * * *每天 00:00~06:00 整點執行
,列舉0,15,30,45 * * * *每小時 0, 15, 30, 45 分執行
/間隔* */4 * * *每 4 小時執行一次
組合範圍+間隔0-10/2 * * * *每小時前 10 分鐘,每 2 分鐘執行

常見實用範例

# 每天凌晨 2:30 備份資料庫
30 2 * * * /usr/bin/mysqldump -u root -p'password' dbname > /backup/db_$(date +\%Y\%m\%d).sql

# 每週一上午 10:00 清理暫存檔
0 10 * * 1 /usr/bin/php -f /var/www/html/scripts/cleanup.php

# 每月 1 號 00:00 產生月報
0 0 1 * * /usr/bin/php -f /var/www/html/scripts/monthly_report.php

# 每 5 分鐘檢查服務狀態(需搭配鎖機制防重疊)
*/5 * * * * /usr/bin/flock -n /tmp/check.lock -c "/usr/bin/php -f /var/www/html/scripts/health_check.php"

除錯與日誌建議

  • 重導向輸出到日誌檔:> /var/log/myscript.log 2>&1
  • 使用 flock 防止同一腳本重疊執行。
  • 腳本開頭加入 #!/usr/bin/php 並賦予執行權限 chmod +x script.php,可簡化 crontab 寫法為 /path/to/script.php。
  • 檢查 Cron 執行狀態:grep CRON /var/log/syslog (Ubuntu/Debian) 或 /var/log/cron (CentOS/RHEL)。

善用 Crontab 能自動化重複性運維工作,讓伺服器更穩定、開發者更專注於核心業務開發。

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