因项目需要,需要安装达梦数据库,但是在使用开发版的过程中发现数据库进程会经常自己停掉,因此考虑自己增加一个守护脚本,定期检查数据库端口是否开启,如果没有开启,就重启一下。
总体思路
1、编写Shell脚本判断端口是否存在,如果不存在就开启数据库
2、设置定时任务,每5分钟检查一次
检查脚本
方法一
#!/bin/bash
# 要检查的端口号
PORT=5236
# 使用netstat命令结合grep检查端口是否被使用
if netstat -tuln | grep ":$PORT"; then
echo "端口 $PORT 已存在。"
else
echo "端口 $PORT 未被使用。"
nohup /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/dmData/DM/dm.ini > /dev/null 2>&1 &
fi
命令netstat参数说明如下:
参数 | 完整参数 | 说明 |
---|---|---|
-t | –tcp | 显示tcp的端口 |
-u | –udp | 显示udp的端口(tcp和udp是不同的协议,它们端口相同并不会冲突) |
-l | –listening | 显示处于监听状态的连接(即状态为LISTENING的连接,否则会显示已建立的连接,状态为ESTABLISHED) |
-n | –numeric | 显示数字地址(ip用数字显示,否则会显示域名,主机名等,就比如127.0.0.1,如果没有-n它就不会显示成127.0.0.1,可以自己试试) |
-p | –program | 显示程序PID及名称 |
-a | –all | 相当于设置了前面所有选项(并且还不止,因为我这里没有列出它的全部选项) |
方法二
#!/bin/bash
# 要检查的端口号
PORT=5236
# 使用netstat命令检查端口是否正在监听
result=$(netstat -tuln | grep ":$PORT ")
# 根据结果输出Success或Failed
if [ -n "$result" ]; then
echo "Success"
else
echo "Failed"
fi
if参数说明
if [ str1 = str2 ] 当两个串有相同内容、长度时为真
if [ str1 != str2 ] 当串str1和str2不等时为真
if [ -n str1 ] 当串的长度大于0时为真(串非空)
if [ -z str1 ] 当串的长度为0时为真(空串)
if [ str1 ] 当串str1为非空时为真
定时任务
执行如下命令
crontab -e
然后插入
*/5 * * * * cd /home/dmdba/;./dmcheck.sh
Crontab是一个允许用户调度任务的工具,这些任务在给定的时间表上运行。Crontab使用一个五列的格式,其中前四列指定任务运行的日期和时间,第五列是运行的命令。
Crontab 时间格式:
* * * * *
- - - - -
| | | | |
| | | | +---- 星期中日期的第几天(0-7,星期日可以是0或7)
| | | +------ 月份(1-12)
| | +-------- 一个月中的日期(1-31)
| +---------- 小时(0-23)
+------------ 分钟(0-59)
Crontab 示例:
# 每天早上6点清空/tmp目录
0 6 * * * rm -rf /tmp/*
# 每周日午夜执行脚本
0 0 * * 0 /path/to/script.sh
# 每月第一天的午夜执行脚本
0 0 1 * * /path/to/script.sh