Linux监听进程是否存在,并加入定时任务
前言
我們在linux主機上可能需要一直運行某一服務,如果關機后或者誤殺,使得服務停止,從而影響日常的任務。比如一BI項目數據庫的抽取,使用Taskctl調度,在每天固定時間進行數據的抽取,如果主機上Taskctl相關的服務進程被關閉的話,就會影響到數據的抽取!
定時任務(調度)
在LINUX中,周期執行的任務一般由cron這個守護進程來處理[ps -ef|grep cron]。cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為“crontab”,是“cron table”的簡寫。
下面簡單說一下crontab的相關內容。
分類
Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
/etc/crontab文件包括下面幾行:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪個shell,這里是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值為空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來定制自己的計劃任務。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致,使用者權限文件如下:
/etc/cron.deny 該文件中所列用戶不允許使用crontab命令
/etc/cron.allow 該文件中所列用戶允許使用crontab命令
/var/spool/cron/ 所有用戶crontab文件存放的目錄,以用戶名命名
創建任務
crontab -e,然后就會有個vi編輯界面,再輸入一定格式的內容到里面 :wq 保存退出,即創建一個定時任務。
該一定格式的內容包括六個域,其中前五個域是指定命令被執行的時間,最后一個域是要被執行的命令。
每個域之間使用空格或者制表符分隔。格式如下:
- 1
對應的合法值 00-59, 00-23 ,01-31, 01-12 ,0-6 (0 is sunday), commands(代表要執行的腳本)
除了數字還有幾個特殊的符號就是星號"*"、斜杠"/"、中劃線"-"、逗號","。
*代表所有的取值范圍內的數字,
/代表每的意思,/5表示每5個單位,
-代表從某個數字到某個數字,
,分開幾個離散的數字。
比如:0 0 * * * sh /home/sh/monitor.sh,每天凌晨0點0分執行monitor.sh這個腳本。
更多內容可以參考:linux下添加定時任務
crond服務相關命令
/sbin/service crond start //啟動服務 /sbin/service crond stop //關閉服務 /sbin/service crond restart //重啟服務 /sbin/service crond reload //重新載入配置 /sbin/service crond status //查看服務狀態- 1
- 2
- 3
- 4
- 5
查看crontab服務是否已設置為開機啟動,執行命令:ntsysv,此命令需要是root用戶。
加入開機自動啟動:chkconfig --level 5 crond on
之后查看:chkconfig --list|grep crond
監聽服務進程是否存在
上邊說了定時任務,每天固定時間執行shell腳本,那么這個腳本我們可以寫上監聽該服務進程的內容。
monitor.sh
這里以Taskctl相關服務為例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
其中,NOWTIME=$(date +%Y%m%d_%H%M%S)得到當前系統時間,沒有什么好說的,注意date后邊有一個空格!emnls為Taskctl核心服務進程名稱。$? -ne 0 不存在,$? -eq 0存在。
shell的if else 語法以及大于,小于等邏輯表達式:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等… 通常用” [ ] “來表示條件測試。注意這里的空格很重要,要確保方括號的空格。
[ -f "somefile" ]:判斷是否是一個文件
[ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執行權限
[ -n "$var" ]:判斷$var變量是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
對一個文件的判斷:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
對于不含變量的任務簡單shell腳本一般能勝任。但在執行一些決策任務時,就需要包含if/then的條件判斷了。shell腳本編程支持此類運算,包括比較運算、判斷文件是否存在等?;镜膇f條件命令選項有: - eq —比較兩個參數是否相等(例如,if [ 2 –eq 5 ])
-ne —比較兩個參數是否不相等 -lt —參數1是否小于參數2 -le —參數1是否小于等于參數2 -gt —參數1是否大于參數2 -ge —參數1是否大于等于參數2 -f — 檢查某文件是否存在(例如,if [ -f "filename" ]) -d — 檢查目錄是否存在- 1
- 2
- 3
- 4
- 5
- 6
- 7
幾乎所有的判斷都可以用這些比較運算符實現。腳本中常用-f命令選項在執行某一文件之前檢查它是否存在。
參考文章:用shell腳本監控進程是否存在 不存在則啟動的實例
轉載于:https://www.cnblogs.com/wanghuaijun/p/7954822.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Linux监听进程是否存在,并加入定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript中的this
- 下一篇: 201671010139 徐楠