可以使用以下步骤编写一个脚本,以在Linux中自动检测并启动某个进程:
- 使用 ps 命令检查进程是否在运行,如果没有,则执行重启命令。可以使用以下命令来检查进程是否正在运行:
ps aux | grep <进程名称>
- 如果进程没有找到,则使用启动命令启动进程,例如:
<启动命令>
- 可以将这些命令组合成一个 shell 脚本,例如:
#!/bin/bash
while true
do
if pgrep <进程名称> >/dev/null
then
sleep 10
else
echo "<进程名称> is not running, restarting"
<启动命令>
sleep <重启间隔时间>
fi
done
该脚本将无限循环检查进程,如果检测到进程已经停止运行,则会重启进程,并在下一个重启之前等待指定的时间。需要将 "<进程名称>" 替换成实际的进程名称,"<启动命令>" 替换成启动进程的实际命令,"<重启间隔时间>" 替换为重启之间等待的时间。
将脚本保存为可执行文件,例如:restart_process.sh,然后使用以下命令来启动脚本:
./restart_process.sh &
& 符号将脚本放在后台运行,这样可以在关闭 shell 会话时保持脚本运行。
监控skwalking示例
以下是一个简单的 Bash 脚本,可以实现定时监控 SkyWalking OAP Server 进程并自动重启:
#!/bin/bash
while true
do
# 检查程序是否正在运行
pid=`ps -ef | grep org.apache.skywalking.oap.server.starter.OAPServer | grep -v grep | awk '{print $2}'`
if kill -0 ${pid} > /dev/null 2>&1
then
echo "pid=${pid} is running"
sleep 60
else
# 执行重启命令
echo "org.apache.skywalking.oap.server.starter.OAPServerStartUp is not running, restarting"
sh /data/skywalking/apache-skywalking-apm-bin/bin/oapService.sh
sleep 30
fi
done
上述脚本会每隔 30 秒检查一次 oap-server 进程是否正在运行。如果未运行,则执行重启命令。在执行脚本之前,你需要先确认 oap-server 的启动命令,并修改脚本中的相应部分。
可以将该脚本保存为一个文件(例如 restart_oap.sh),并使用 nohup 命令后台运行:
nohup bash restart_oap.sh > /dev/null 2>&1 &
这样,即使你关闭终端窗口,脚本也会继续在后台运行,并定时监控重启 SkyWalking OAP Server。
参考资料
linux-监控服务进程挂掉重启服务