手動完成 "任務" 和 "監控" 主要有下面三步:php
1. mission_cron.php(定時自動任務腳本):html
<?php /** * 自動任務 定時器 (5s 執行). * * swoole_timer_tick 解決秒級定時; * 如需調整,注意配置路徑 和 mission_cron_monitor. * * Daemon Run: * ./mission_cron_monitor * * Foreground Run: * php mission_cron.php * * Stop: * kill -9 PID * * @farwish.com */ swoole_timer_tick(5000, function() { // 查詢結果 // 事務性更新 // 記錄日誌 // 輸出結果 }
2. mission_cron_monitor (由 crontab 運行,監控上述腳本):bash
#/bin/bash # 監控定時器,斷掉重啓. # # crontab used in /var/spoor/cron/ # ( crontab -e ) # # @farwish.com phpbin=/usr/local/php7/bin/php curdir=`dirname $0` script=${curdir}/mission_cron.php process=`ps aux | grep -v grep | grep ${script}` if test -z "$process"; then nohup ${phpbin} ${script} > /dev/null 2>&1 & fi
這裏 curdir 沒有使用 `pwd`,緣由在於 pwd 獲取的是當前所在工做目錄,非執行的腳本所在目錄,你能夠經過 man 得到詳細解釋。swoole
pwd - print name of current/working directoryphp7
dirname - strip last component from file name函數
nohup的做用在於不受終端掛斷影響,配合 & 後臺運行,完美實現了 daemon.spa
3. 設置用戶級 cron 腳本.日誌
# 用戶級運行cron. # 分 時 日 月 周 命令 # @farwish.com # 每分鐘執行 */1 * * * * /home/www/project/mission_cron_monitor
完成以上三步,主要工做就完了,能夠運行查看效果了;code
重申:mission_cron.php 任務不必定要包在 swoole_timer_tick 回調函數內,僅在執行 秒/毫秒 定時須要。component
腳本雖然簡單,可是有一些問題須要小心,以下:
1. 排錯:任務有沒有執行經過看日誌 /var/log/cron 是否有執行記錄,
有執行的話就是腳本問題,語法錯誤或者其它。注意,腳本中一概使用絕對路徑。
2. 級別:系統級任務 /ect/crontab
用戶級任務 直接用 crontab -e 編輯(存放位置 /var/spoor/cron/weichen)
程序級任務 swoole_timer_tick(1000, function() {});
3. 選項:crontab -e
crontab -l # 當前用戶擁有的 cron
crontab -r # 刪除當前用戶的 cron
crontab -ri # 刪除前先詢問
更多 crontab -h