[Shell] swoole_timer_tick 与 crontab 实现定时任务和监控
手動完成 "任務" 和 "監控" 主要有下面三步:
?
1. mission_cron.php(定時自動任務腳本):
<?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 運行,監控上述腳本):
#/bin/bash # 監控定時器,斷掉重啟. # # crontab used in /var/spoor/cron/ # ( crontab -e ) # # @farwish.comphpbin=/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"; thennohup ${phpbin} ${script} > /dev/null 2>&1 & fi這里 curdir 沒有使用 `pwd`,原因在于 pwd 獲取的是當前所在工作目錄,非執行的腳本所在目錄,你可以通過 man 獲得詳細解釋。
pwd - print name of current/working directory
dirname - strip last component from file name
?
nohup的作用在于不受終端掛斷影響,配合 & 后臺運行,完美實現了 daemon.
?
3. 設置用戶級 cron 腳本.
# 用戶級運行cron. # 分 時 日 月 周 命令 # @farwish.com# 每分鐘執行 */1 * * * * /home/www/project/mission_cron_monitor?
完成以上三步,主要工作就完了,可以運行查看效果了;
重申:mission_cron.php 任務不一定要包在 swoole_timer_tick 回調函數內,僅在執行 秒/毫秒 定時需要。
?
腳本雖然簡單,但是有一些問題需要當心,如下:
?
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
轉載于:https://www.cnblogs.com/wanglijun/p/8707599.html
總結
以上是生活随笔為你收集整理的[Shell] swoole_timer_tick 与 crontab 实现定时任务和监控的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业银行信用卡APP叫什么名字?信用卡A
- 下一篇: 工商银行信用卡APP叫什么名字?APP有