无法在FreeBSD中杀死进程

时间:2015-11-30 01:52:01

标签: process freebsd

我在FreeBSD 10.1版本中有一个脚本,它的目的是监视另一个进程并使进程保持活动状态。 当我试图自杀时,它总是失败。 我试试killall [名字| PID]; pkill -9 [姓名];服务了望塔停止,没有一个工作。 以下是我的脚本,请告知解决方案。

#!/bin/sh

. /etc/rc.subr
prog="Thin-Agent WatchDog"
TAS_BIN="/etc/supermicro/tas-freebsd.x86_64"
TAS_LOG="/etc/supermicro/tas_system_crush.log"
monitor=1
name="watchtas"
rcvar=${name}_enable
command=/etc/rc.d/{$name}
start_cmd="watchdog"
stop_cmd="stop_watching"
load_rc_config $name


recover_tas() {
  $TAS_BIN -agent start-service
  RETVAl=$?
  return $RETVAL
}

stop_watching() {
  monitor=0
}

watchdog() {
    while [ $monitor == 1 ]
    do
        tas_count=`ps -x | grep tas-freebsd.x86_64 | grep -v grep | wc -l | sed 's/ *//g'`

        if [ $tas_count -eq 0 ]; then
            timestamp=`date`
            echo "[$timestamp]TAS shutdown unexpectedly, restarting TAS now..." >> $TAS_LOG
            echo $?
            recover_tas
        else
            sleep 10
        fi
    done
}

run_rc_command "$1"

1 个答案:

答案 0 :(得分:0)

您的启动脚本在几个方面失败。 service watchtas start不会返回命令行,因为守护程序进程不会分离。 service watchtas stop无法按要求运行,因为变量monitor是执行脚本的本地变量。

我会将启动脚本和监视程序代码分离到单独的文件中,并使用daemon(8)监视监视程序。

/usr/local/etc/rc.d启动脚本如下所示:

#!/bin/sh
. /etc/rc.subr
name="watchtas"
rcvar=${name}_enable
pidfile="/var/run/${name}.pid"
command="/usr/sbin/daemon"
command_args="-c -f -P ${pidfile} -r /usr/local/sbin/${name}"
load_rc_config $name
run_rc_command "$1"

/usr/local/sbin/watchtas监视程序代码如下所示:

#!/bin/sh
TAS_BIN="/etc/supermicro/tas-freebsd.x86_64"
TAS_LOG="/etc/supermicro/tas_system_crush.log"

recover_tas() {
  $TAS_BIN -agent start-service
  RETVAl=$?
  return $RETVAL
}

while true
do
    tas_count=`ps -x | grep tas-freebsd.x86_64 | grep -v grep | wc -l | sed 's/ *//g'`

    if [ $tas_count -eq 0 ]; then
        timestamp=`date`
        echo "[$timestamp]TAS shutdown unexpectedly, restarting TAS now..." >> $TAS_LOG
        echo $?
    recover_tas
    else
        sleep 10
    fi
done

看起来你有一个守护进程看守护进程看着一个守护进程。