Linux bash 脚本监控和重启一个守护进程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wisefree
V2EX    Bash

Linux bash 脚本监控和重启一个守护进程

  •  
  •   wisefree 2024-04-28 20:42:17 +08:00 1579 次点击
    这是一个创建于 598 天前的主题,其中的信息可已经有所发展或是发生改变。

    最近有个需求,监控某个守护进程,如果进程不存在,则重启这个进程,打算写一个 bash 脚本和 service 服务满足这个需求。

    1. 通过 systemctl start monitor_process.service, 启动监控
    2. 通过 systemctl start monitor_process.service ,停止监控,同时杀死启动的进程。
    3. 这个服务必须是在系统所有服务启动之后,才启动该服务

    看到 stackoverflow的高赞回答后,不知道这样写的脚本是不是合适的,有没有更加好实践。

    我对 stackoverflow 高赞回答表示怀疑,其中jobs -p,无法列出后台的守护进程。因为一般编写守护进程代码时,都是 fork 两次并重新设置会话 setsid

    trap 'kill $(jobs -p)' EXIT; until myserver & wait 

    monitor_process.sh

     #!/bin/bash this_bash_pid=$$ exe_name="thisIsExample" # 定义一个函数来杀死进程 kill_process() { if [ -n "${PID}" ]; then kill -9 ${PID} fi exit } # 使用 trap 命令捕获 TERM, INT 和 EXIT 信号 trap 'kill_process' TERM INT EXIT while true do output=$(ps -ef | grep ${exe_name} | grep -v grep | grep -v ${this_bash_pid}) if [ $? -eq 0 ];then PID=$(echo $output | awk '{print $2}') echo "${exe_name} :${PID} is running" else ./${exe_name} & output=$(ps -ef | grep ${exe_name} | grep -v grep | grep -v ${this_bash_pid}) echo $output PID=$(echo $output | awk '{print $2}') echo $PID fi sleep 1 done 

    monitor_process.service

     [Unit] Description=Monitor Process Service After=multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/monitor_process.sh Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target 
    10 条回复    2024-04-28 22:17:11 +08:00
    ysc3839
        1
    ysc3839  
       2024-04-28 20:50:34 +08:00 via Android   1
    为什么不直接用 systemd 启动目标进程?
    wisefree
        2
    wisefree  
    OP
       2024-04-28 21:25:29 +08:00
    @ysc3839 要监视进程是否运行,systemd 直接启动进程,进程 die 后,无法自动重启
    37Y37
        3
    37Y37  
       2024-04-28 21:47:46 +08:00 via Android   1
    @wisefree 再了解下 systemd
    ysc3839
        4
    ysc3839  
       2024-04-28 21:52:52 +08:00 via Android
    @wisefree systemd 怎么不能自动重启?你自己发的配置文件里就写了 Restart=on-failure 呀,不能自动重启的话,你写来干嘛?
    Remember
        5
    Remember  
       2024-04-28 21:57:11 +08:00   1
    @wisefree 你是对 systemd 有什么误解吗?
    wisefree
        6
    wisefree  
    OP
       2024-04-28 21:58:10 +08:00
    @ysc3839 我再搜下 systemd ,确实不太懂这个,临时想出的 bash 脚本,然后用 chatgpt 写了一个服务
    wisefree
        7
    wisefree  
    OP
       2024-04-28 21:58:26 +08:00
    @37Y37 好的,我再去搜下相关知识,多谢
    wisefree
        8
    wisefree  
    OP
       2024-04-28 21:59:26 +08:00
    @Remember 确实有误解,之前没有了解 systemd 的用法,就用了 chatgpt 写的 service
    Remember
        9
    Remember  
       2024-04-28 22:11:39 +08:00   1
    @wisefree 直接用 systemd 守护就可以了,崩了自动重启。systemd 之所以被骂的很惨也慢慢统一各个发行版,不是没有原因的。
    wisefree
        10
    wisefree  
    OP
       2024-04-28 22:17:11 +08:00
    @Remember 嗯嗯,刚刚大致搜索了 systemd ,原来它这么强大
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5220 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 07:04 PVG 15:04 LAX 23:04 JFK 02:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86