linux下求写一个自动重启某服务的脚本,不胜感激!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下求写一个自动重启某服务的脚本,不胜感激!相关的知识,希望对你有一定的参考价值。
比如该服务是test,需要配合test.lua配置文件一起启动,启动方式是切换到/var/test,然后输入./test ./test.lua来启动,我需要的是每天12点和0点关掉该服务然后启动,请问该怎么写?
【--------------------------------start of script -------------------------------】#!/bin/bash
# 运行记录日志
runlog=/var/test/test.log
# 切换到脚本的工作目录
cd /var/test
# 首先以正常的方式(尝试)结束掉test服务的进程,静默结束
pgrep test |xargs kill -15 &>/dev/null
# 休息1秒,让出1秒时间充分地停止进程
sleep 1
# 检查一下test有没有被成功的结束,首先判断一下执行kill -15以后是否残留有test服务的进程
processnum=$(pgrep test |wc -l)
# 如果test进程数量大于0,则自动让脚本采用强制进程结束的方式快速终止test进程;
if [[ "$processnum" -gt "0" ]];then
pgrep test |xargs kill -9 &>/dev/null
# 发送wait指令,kill -9 一旦执行完毕脚本立刻执行接下来的操作
wait
fi
# 记录停止服务的时间,时间格式的呈现:11/30/13 06:25:37
echo "$(date +"%D %T") service test stoped" >>$runlog
# 执行你的启动命令 ,静默启动
./test ./test.lua &>/dev/null
# 休息1秒,让出1秒时间充分地让test进程启动完毕
sleep 1
# 统计启动命令执行后test进程的数量
processnum=$(pgrep test |wc -l)
# 如果进程的数量大于0,记录服务成功启动;
if [[ "$processnum" -gt "0" ]];then
echo "$(date +"%D %T") service test start sucess" >>$runlog
# 否则(进程数量等于0),记录服务启动失败;
else
echo "$(date +"%D %T") service test start fail" >>$runlog
fi
【----------------------------end of script -----------------------------】
将上述代码存入到test.sh
在系统的crontab里面加入 00 00,12 * * * /var/test/test.sh &>/dev/null ,便捷的方法:echo '00 00,12 * * * /var/test/test.sh &>/dev/null' >>/var/spool/cron/*** , ***用能够有权限执行test.sh的用户的账号名称替代(如果不是root用户,那么要确保你调用的用户的SHELL环境变量是/bin/bash或者是/bin/sh),比如使用root, echo '00 00,12 * * * /var/test/test.sh &>/dev/null' >>/var/spool/cron/root 参考技术A
restart.sh:
datecd /var/test
pid=`ps -e|grep test | grep -v grep | awk 'print $1'`
kill -15 $pid
sleep 2
./test ./test.lua
echo "restart end, return $?, `date`"
然后执行 crontab -e 增加下面这行:
0 0,12 * * * restart_test.sh > /var/test/restart_test.log
linux下通过脚本实现自动重启程序
参考技术A自动重启故障相信大家都遇到过,原因也有很多,跟系统,硬件或者外界因素都有关,但是在Linux中可没有那么简单。这里集中讨论linux实现自动重启程序的方法。下面一起看看!
自动重启脚本
假定需要实现重启的程序名为 test ,我们这里通过判断进程数目来判断程序是否正常。
ps -ef | grep "$1" | grep -v "grep" | wc –l 是获取$1(本例中为test)的进程数,脚本根据进程数来决定下一步的操作。通过一个死循环,每隔1秒检查一次系统中的指定程序的进程数。
代码如下:
脚本check
#!/bin/sh
#-----------------------------------# 函数: CheckProcess# 功能: 检查一个进程是否存在# 参数: $1 --- 要检查的进程名称# 返回: 如果存在返回0, 否则返回1.#---------------------------------------CheckProcess() # 检查输入的参数是否有效 if [ "$1" = "" ]; then return 1 fi #$PROCESS_NUM获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动 PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` if [ $PROCESS_NUM -eq 1 ]; then return 0 else return 1 fi
# 检查test实例是否已经存在while [ 1 ] ; do CheckProcess "test" CheckQQ_RET=$? if [ $CheckQQ_RET -eq 1 ]; then# 杀死所有test进程,可换任意你需要执行的操作 killall -9 test exec ./test & fi sleep 1done
脚本start:
加入limit coredumpsize 102400,设置core file的大小,一旦程序Core Dump,有迹可寻。在该脚本中后台执行check脚本,可以省去很多麻烦,
#!/bin/cshlimit coredumpsize 102400
./check &
补充:电脑总是自动重启怎么办
1、右击“我的电脑”,选择“属性”项。
2、在打开的系统属性窗口中选择“高级系统设置”项进入。
3、在打开的“系统属性”窗口中,切换至“高级”选择卡,然后点击“系统和故障恢复 设置”按钮。
4、在打开的窗口中取消勾选“自动重启启动”项并按确认即可。
5、当电脑在使用的过程中产生蓝屏时,我们就可以进入“系统日志”管理器中查看产生系统失败的根源啦。打开“运行”对话框,输入命令“eventvwr.msc”即可查看日志信息,从中定位系统产生失败的原因。
6、当然,我们也可以通过禁用某些开机项来尝试修复系统。打开“运行”对话框,输入命令“msconfig”进入“系统配置实用程序”界面,勾选“常规”选项卡下的“诊断启动”选项。
7、还有一种修复计算机蓝屏或重启故障的方法,就是在电脑启动时按“F8”进入系统故障菜单,从中选择“安全模式”进入或“最后一次正确的配置”项进入系统,将及有可能修复系统。
8、当然,如果以上方法均不能解决问题,那么建议您还是重新安装一下系统,毕竟安装系统所耗费的时间相对修复所用时间要少许多。一劳永逸之事才是王道。
相关阅读:电脑自动重启方法
方法一:
1、打开控制面板-管理工具-计划任务程序
2、创建基本任务,名称栏目,输入“定时重启”,下一步;
3、在窗口里,有每天、每周、每月、一次各种选择,这里小诚选择一次,这次执行完就失效,您可以根据自己的情况进行选择哈,点击下一步;
4、设置重启的日期、时间点,下一步;
5、选择启动程序,下一步;
6、在打开页面里,点击浏览,找到C;\\Windows\\System32\\Shutdown.exe,点击打开;
7、在添加参数栏目里输入“-r”(重启),进行下一步
8、点击完成,即可实现自动重启了
方法二:
以上是关于linux下求写一个自动重启某服务的脚本,不胜感激!的主要内容,如果未能解决你的问题,请参考以下文章