在 Linux 伺服器環境下,利用 Crontab 排程執行 PHP 腳本是處理定時任務(如資料備份、報表生成、快取清理)的標準做法。本文以「每 5 分鐘向資料表插入 2 筆資料」為例,完整示範從建表、撰寫腳本到配置 Crontab 的全流程。
先在 MySQL 中建立一張簡單的 person 表:
CREATE TABLE `person` ( `FirstName` varchar(100) NOT NULL, `LastName` varchar(100) DEFAULT NULL, `Age` varchar(100) DEFAULT NULL, PRIMARY KEY (`FirstName`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
腳本負責連線資料庫並執行插入操作。安全建議: 腳本檔案勿放置於網站公開目錄(如 wwwroot),防止被 URL 直接存取觸發。可放在非公開路徑(如 /home/scripts/),或使用框架(ThinkPHP、CodeIgniter 等)的命令列模式調用。
注意: 範例使用已棄用的
mysql_*函式,實際生產環境請改用mysqli或PDO,並將資料庫憑證存放於環境變數或獨立配置檔中。
crontab -e 編輯當前使用者的排程表。*/5 * * * * /usr/local/php/bin/php /home/wwwroot/default/test.php
欄位說明:
| 欄位 | 值 | 含義 |
|---|---|---|
| 分 | */5 | 每 5 分鐘 |
| 時 | * | 每小時 |
| 日 | * | 每天 |
| 月 | * | 每月 |
| 週 | * | 每週 |
| 命令 | /usr/local/php/bin/php /home/wwwroot/default/test.php | PHP 執行檔路徑 + 腳本絕對路徑 |
更多 Crontab 語法請參考:Crontab 命令詳解
Crontab 執行輸出預設會寄送郵件給該使用者,也可查看系統日誌:
/var/log/cron # CentOS/RHEL 系統 /var/log/syslog # Debian/Ubuntu 系統
若腳本有 echo 輸出,可重導向至自訂日誌檔便於除錯:
*/5 * * * * /usr/local/php/bin/php /home/wwwroot/default/test.php >> /var/log/test_cron.log 2>&1
flock),防止重疊執行。