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脚本。