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:

date
cd /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下求写一个自动重启某服务的脚本,不胜感激!的主要内容,如果未能解决你的问题,请参考以下文章

求写一个 Linux 下 对mysql的操作脚本

linux服务器挂掉自动重启脚本(转)

linux服务器自动重启,不知道啥原因,求高手指点

求linux脚本,就是服务器自动检测网络,每个一段时间自动检测,丢包严重或断网,就自动重启服务器,求高手

重启Nginx会影响mysql吗?

如何优雅的在 Linux 下开机自动重启脚本