Linux下守护脚本编写

本文介绍了在项目开发中遇到的达梦数据库进程问题,通过编写Shell脚本检查5236端口并设置Cron定时任务每5分钟执行,确保数据库服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因项目需要,需要安装达梦数据库,但是在使用开发版的过程中发现数据库进程会经常自己停掉,因此考虑自己增加一个守护脚本,定期检查数据库端口是否开启,如果没有开启,就重启一下。

总体思路

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angushine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值