建立 Console Controller
send();
}
// 選項參數 (--since=2024-01-01)
public function actionCleanup($days = 30, $dryRun = false) {
echo "Cleanup older than $days days, dryRun: " . ($dryRun ? 'yes' : 'no') . "\n";
}
}
?>
執行方式
| 環境 | 指令 |
| Linux/Mac | php yii task/index |
| Windows | php yii task/index (在專案根目錄) |
| 帶參數 | php yii task/mail "user@example.com" |
| 選項參數 | php yii task/cleanup 60 --dryRun=1 |
Linux Crontab 部署
# 編輯 crontab
crontab -e
# 每分鐘執行一次
* * * * * /usr/bin/php /var/www/project/yii task/index >> /var/log/yii_cron.log 2>&1
# 每天凌晨 3 點清理
0 3 * * * /usr/bin/php /var/www/project/yii task/cleanup 30 >> /var/log/yii_cleanup.log 2>&1
Windows 排程器部署
- 開啟「工作排程器」→ 建立基本任務
- 觸發條件:每日/每週/自訂
- 動作:啟動程式
- 程式:
D:\php\php.exe
- 引數:
D:\www\project\yii task/index
- 完成
進階技巧
- 鎖機制防重複執行: 使用
yii\mutex\FileMutex 或 Redis SETNX
- 日誌與監控: 統一輸出 JSON 格式,接入 ELK/Prometheus
- 佇列整合: 排程僅推送 Job 至 RabbitMQ/Redis Queue,由 Worker 消費
- 多進程並行:
yii task/process --worker=1 --total=4 分片處理
相關專題
- 《Yii 框架入門及常用技巧總結》
- 《PHP 優秀開發框架總結》