systemctl停止服务,同进程名的其它服务也被停止

问题描述:

在/etc/init.d创建3个相同的服务,mytestservice1、mytestservice2、mytestservice3,其内容基本相同,mytestservice1如下代码:

#!/bin/bash
# chkconfig:1234 90 60
# description: Test for stopping service.

# mytestservice1、mytestservice2、mytestservice3只有这里不同
servername=myservice1
serverdir=/home/myservice1
binpath=/home/myservice1/myservice.sh
#servername=myservice2
#serverdir=/home/myservice2
#binpath=/home/myservice2/myservice.sh
#servername=myservice3
#serverdir=/home/myservice3
#binpath=/home/myservice3/myservice.sh

prog=$(basename $binpath)
. /etc/init.d/functions

restart() {
        stop
        start
}
reload() {
        stop
        start
}
start() {
	echo -n $"Starting $daemon:"
        daemon nohup $binpath &
        retval=$?
        echo
        [ $retval -eq 0 ]
}

stop() {
	echo -n $"Stopping $daemon:"
        killproc $binpath
        retval=$?
        echo
        [ $retval -eq 0 ]
}

ha_status() {
        status $prog
        ps -ef|grep $prog && exit 0
}

case "$1" in

     start)
        $1
     ;;
     stop)
        $1
     ;;
     reload)
        $1
     ;;
     restart)
        $1
     ;;
     status)
        ha_status
     ;;
     *)
        echo "Usage:$0 {start|stop|reload|restart|status}"
        exit 1
esac

启动mytestservice1、mytestservice2、mytestservice3
在这里插入图片描述
假设/home/myservice3/myservice.sh意外停止(这里用kill掉代替)
在这里插入图片描述
如果此时用 service mytestservice3 stop 停止服务,那么/home/myservice1/myservice.sh和/home/myservice2/myservice.sh会被停止。
在这里插入图片描述


原因分析:

分析service脚本、mytestservice脚本、systemctl机制,service或是systemctl最后都是通过/etc/rc.d/init.d/mytestservice3 stop停止服务,/etc/rc.d/init.d/mytestservice3是从/etc/init.d/mytestservice3拷贝的。
在这里插入图片描述
mytestservice3调用/etc/init.d/function中killproc函数停止服务,其中查找相应进程PID的命令,由于/home/myservice3/myservice.sh已经停止,会执行 “pidof -c -m -o $$ -o $PPID -o %PPID -x “myservice.sh””,因此会把myservice2和myservice3的myservice.sh的PID也搜索出来,Kill掉查找到的PID。

# Output PIDs of matching processes, found using pidof
__pids_pidof() {
    pidof -c -m -o $$ -o $PPID -o %PPID -x "$1" || \
        pidof -c -m -o $$ -o $PPID -o %PPID -x "${1##*/}"
}


解决方案:

改变各进程名称,让进程名各不相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值