程序异常退出,因为pid文件存在,system 无法自动重启

问题现象     

最近遇到一个问题,自己写的进程通过system配置了服务,有时会发现服务停掉了,查看状态为activating , 经过研究是因为 pid 文件的存在(/var/run/myprocess.pid)导致无法启动

[root@localhost ~]# systemctl status myprocess
● myprocess.service - aaa
   Loaded: loaded (/usr/lib/systemd/system/myprocess.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since 二 2022-09-20 13:22:36 CST; 313ms ago
  Process: 114179 ExecStart=/usr/bin/myprocess (code=exited, status=1/FAILURE)
 Main PID: 112360 (code=killed, signal=KILL)

9月 20 13:22:36 localhost.localdomain systemd[1]: Unit myprocess.service entered failed state.
9月 20 13:22:36 localh

ost.localdomain systemd[1]: myprocess.service failed.

解决方案

如何解决这个问题呢,利用 system 的 ExecStartPre 参数,增加一个脚本,在 ExecStart  执行该脚本即可,脚本逻辑是,如果 pid 问题存在就杀死原进程,并删除pid文件即可。

[Unit]
Description=aaa
After=network.target 

[Service]
Type=forking
User=root
Group=root
ExecStartPre=/usr/local/bin/clean_pidid.sh  ### 增加该行
ExecStart=/usr/bin/myprocess
Restart=on-failure
RestartSec=5
WorkingDirectory=/usr/bin/
#!/bin/sh
if [ -f /var/run/myprocess.pid ];then
   pid=`cat /var/run/myprocess.pid`
   kill -9 $pid
   rm /var/run/myprocess.pid
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值