在linux系统中,我们经常需要做一些检测操作,如:检测mysql进程状态啦、检测redis-service进程是否存在啦之类的,所以最好是有一个脚本能把这些检测操作统统都放到cron中进行定时检测,而不是我们人工去登陆服务器、查看进程状态等
# 检测nginx状态
$ cat ./check_nginx.sh
#!/bin/bash
check_num=`ps -e -o stat,ppid,pid,cmd | grep nginx | grep -v grep | grep -v check | egrep -v '^[Zz]' | wc -l`
echo 检测时间: `date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
if [[ $check_num -lt 1 ]];
then
echo 'nginx运行状态异常, 开始检测僵尸进程'
echo $check_num
check_num_z=`ps -e -o stat,ppid,pid,cmd | grep nginx | grep -v grep | grep -v check | egrep '^[Zz]' | wc -l`
if [[ $check_num_z -gt 0 ]]
then
echo '存在僵尸进程, 开始清理僵尸进程, 请保证运行该脚本的为超级用户或有权限kill该进程的用户'
if [[ $check_num_z -eq 1 ]]
then
check_num_id=`ps -e -o stat,ppid,pid,cmd | grep nginx | grep -v grep | grep -v check | egrep '^[Zz]' | awk '{print$3}'`
kill -9 $check_num_id
echo 'Kill命令执行完成.'
fi
fi
echo '开始启动php-fpm程序'
service nginx restart
echo 'nginx程序启动完成. '
else
echo '检测结果为正常运行'
fi
# 检测自定义程序的进程(此处以go编写的网站服务fram_api进行示例)
$ cat check_fram_api.sh
#!/bin/bash
check_num=`ps aux | grep fram_api | grep -v check | grep -v grep | wc -l`
if [[ $check_num = "0" ]];
then
cd /home/www/golang_myself;
./fram_api >> fram_api.log 2>&1 &
fi