shell守護腳本
① 如何使shell腳本成為守護進程
1,if條件語句裡面表達式要與左右[ ] 用空格隔開,否則運行時會報錯
2,用表達式給變數負值時要將表達式放在括弧()裡面,並在前面加符號"$",應該還有其他方法 目前只會這種,在參考那篇博客用單引號運行無法通過。
3,ps aux | grep $PROGRAM | grep -v grep | wc -l 此表達式檢測運行進程數量
4,ps aux | grep $PROGRAM | grep T | grep -v grep | wc -l 此表達式檢測進程運行狀態,0:運行 1:停止 但進程依然存在 可以通過命令 kill -SIGSTOP pid 進行測試
第一個條件判斷目標進程運行數目 數目小於1即為0 則運行目標進程
第二條件判斷目標進程是否處於停止狀態 處於停止狀態則kill掉 重新運行該進程
應用程序編譯完及腳本編寫好後,在/etc/rc.local 文件中添加執行語句 /usr/mytest/mytest.sh & 重啟後就能自動載入守護進程了。
可以使用linux定時調度機制:crontab
編輯:crontab -e
格式:*/5 * * * * xx.sh 其中:5表示每5分鍾,xx.sh就是你要5分鍾周期調度的腳本。
crontab資料推薦一片文章:
http://www.cnblogs.com/jiafan/articles/1153066.html
希望能幫助到你,你的好評是我前進的動力,謝謝!
③ 如何給腳本寫一個守護進程
在我們日常運維中,寫腳本監控一個進程是比較常見的操作,比如我要監控mysql進程是否消失,如果消失就重啟mysql,用下面這段代碼就可以實現:
#!/bin/sh
Date=` date '+%c'`
while :
do
if ! psaux | grep -w mysqld | grep -v grep >/dev/null 2>&1
then
/etc/init.d/mysqldstart
echo $Datemysqldwasreboot >>/var/log/reboot_mysql.log
fi
done
本篇這是以mysql為例子,但實際中如果是監控的腳本出了問題,報警沒發出來,那就比較尷尬了,所以為保證我們的檢查腳本能實時運行,我們需要一個進程來守護這個腳本,這就是我們今天要說的主題,如何給腳本寫一個daemon,我們先上代碼:
#!/usr/bin/python
import subprocess
from daemonimport runner
cmd = "/root/demo_script/restart_mysql.sh"
class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/hello.pid'
self.pidfile_timeout = 5
def start_subprocess(self):
return subprocess.Popen(cmd, shell=True)
def run(self):
p = self.start_subprocess()
while True:
res = p.poll()
if resis not None:
p = self.start_subprocess()
if __name__ == '__main__':
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
腳本比較簡單,沒什麼特別的邏輯,關於daemon這個模塊如何使用,我這里給出官方的解釋,注意喲,是英文的,我就不翻譯了,如果有生詞就查查字典,就當多學幾個了單詞吧。
__init__(self, app)
| Setuptheparametersof a new runner.
|
| The `app` :
|
| * `stdin_path`, `stdout_path`, `stderr_path`: Filesystem
| pathsto openand replacetheexisting `sys.stdin`,
| `sys.stdout`, `sys.stderr`.
|
| * `pidfile_path`: Absolutefilesystempathto a filethat
| willbeusedas thePIDfilefor thedaemon. If
| ``None``, noPIDfilewillbeused.
|
| * `pidfile_timeout`: Usedas thedefault acquisition
| timeoutvaluesuppliedto therunner's PIDlockfile.
|
| * `run`:
| started.
|
| do_action(self)
| Performtherequestedaction.
|
| parse_args(self, argv=None)
| Parsecommand-linearguments.
這樣就完成了,守護進程的啟動比較高大上,輸入以上代碼後,可以直接在終端輸入:
#python monitor.py start
當然還有stop,restart等參數。
這里我介紹的是其中一個應用場景,實際中可以靈活運用,比如1台伺服器上啟動的程序過多,環境配置比較復雜,就可以先啟動daemon進程,然後通過daemon來啟動其它所有應用程序,就不用一個一個應用程序啟動了,這篇就到這里,有問題可以給我留言。
④ linux中shell寫腳本
#!/bin/bash
while true;do
if [ "$#" -ne 1 ];
then
echo "Incorrect number of arguments"
exit 1
else
who| grep "^$1" >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "the user $1 has logged on。"
exit 0
fi
fi
sleep 60
done
⑤ Shell怎麼做守護腳本
寫兩個腳本,兩個要互相調用並檢查存不存在,如果要做守護的話實際上還要檢查被拉起的程序
第一個腳本654321.sh
[[-z$(ps-ef|grep123456.sh|grep-v)]]&&nohupsh123456.sh&
第二個腳本123456.sh
[[-z$(ps-ef|grep654321.sh|grep-v)]]&&nohupsh654321.sh&
兩個互相檢查進程在不在,不在就拉起來
⑥ 求linux下的進程守護腳本。最好能有說明。
那個很好解決, 用shell檢查進程號是否存在, 如果不存在就啟動。這是一個語句可以搞定的
仔細的看下網名?
⑦ 求教linux shell 後台網路監控腳本
#!/bin/bash
ping -c 3 www..com
YES=` echo $? `
if [ $YES -ne 0 ]
then
ok
fi
再設一個計劃任務就好了
OK 命令再好是絕對路經
⑧ shell腳本是什麼
當執行命令或程序語句是通過程序文件而不是命令行,那這個程序被稱為Shell腳本。如果Shell腳本內置很多命令、語句及循環控制,然後一次性執行完畢,這種通過文件執行腳本的方式稱為非交互方式。用戶可以在Shell腳本中輸入一系列命令及命令語句組合。這些命令、變數和流程式控制制語句等有機地結合在一起,就形成一個功能強大的Shell腳本。