【问题标题】:Running logstash forwarder as a daemon service将 logstash 转发器作为守护程序服务运行
【发布时间】:2017-01-31 03:25:00
【问题描述】:

我找到了这篇解释如何制作启停服务的文章; http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html

所以我写了这个:

#!/bin/bash
#
# chkconfig: 3 80 20
# description: boop-logstash-forwarder
#
# Get function from functions library
. /etc/init.d/functions
# Start the service

LOGSTASH_FORWARDER="/logiciels/logstash-forwarder/logstash-forwarder"
LF_CONF="/appli/projects/BOOP-LOGSTASH-FORWARDER/logstash-forwarder.conf"
SERVICE_NAME="boop-logstash-forwarder"

start() {
        initlog -c "echo -n Starting $SERVICE_NAME: "
        $LOGSTASH_FORWARDER -config=$LF_CONF &
        ### Create the lock file ###
        touch /var/lock/subsys/$SERVICE_NAME
        success $"$SERVICE_NAME startup"
        echo
}
# Restart the service
stop() {
        initlog -c "echo -n Stopping $SERVICE_NAME: "
        killproc $SERVICE_NAME
        ### Now, delete the lock file ###
        rm -f /var/lock/subsys/$SERVICE_NAME
        echo
}
### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $SERVICE_NAME
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
exit 0

我有两个问题,首先logstash转发器正在控制控制台,非常冗长,我应该在启动命令中将它的输出重定向到文件吗?

第二个也是最大的问题,停止命令不起作用,我明白了:

Stopping looping-logstash-forwarder:                       [FAILED]

我在脚本中做错了吗?

谢谢。

ps:红帽企业 Linux 服务器 5.9 版

【问题讨论】:

  • 您写的是killproc 还是/usr/bin/ 中的内容(抱歉没有可使用的RHELS)。看来问题一定是有的。如果你从 cmd 行运行它会发生什么?或者假设这是一个脚本,从 cmd 行手动执行它的步骤以查看问题所在。祝你好运。
  • kill proc 在 /etc/init.d/functions 中定义并在脚本中导入,因此它应该可以工作。
  • 但它确实似乎不起作用。所以我想知道为什么。如果您有其他理论或途径可以探索解决此问题,那么您应该遵循它,否则请确保 killproc 按预期工作。您可以执行if killproc "$serviceName" ; then echo error running killproc 1>&2 ; exit fi 来确认生成[FAILED] 文本的是killproc。祝你好运。
  • 是的,它说运行 killproc 时出错,但没有显示原因
  • 好的,那你要放弃了吗?现在您可以肯定地知道 killproc 中存在问题。您必须隔离该脚本中出错的确切行,并检查传入的参数。我会将killproc 复制到/tmp,编辑并在顶部添加set -vxe ; set PS4='${LINENO} #',然后运行@987654331 @ 并查看它在哪里停止以及传入的参数是什么。我猜测您的“$serviceName”并不是您认为的那样,并且无法与任何正在运行的进程名称匹配。祝你好运!

标签: bash redhat daemon


【解决方案1】:

这是一个使用 kill 而不是 killproc 的工作版本:

#!/bin/bash
#
# chkconfig: 3 80 20
# description: boop-logstash-forwarder
#
# Get function from functions library
. /etc/init.d/functions
# Start the service

LOGSTASH_FORWARDER="/logiciels/logstash-forwarder/logstash-forwarder"
LF_CONF="/appli/projects/BOOP-LOGSTASH-FORWARDER/logstash-forwarder.conf"
LOGFILE="/appli/projects/BOOP-LOGSTASH-FORWARDER/logstash-forwarder.log"
PIDFILE="/appli/projects/BOOP-LOGSTASH-FORWARDER/logstash-forwarder.pid"
SERVICE_NAME="boop-logstash-forwarder"

blockUntilFileExist () {
    while ! [[ -f "$1" ]] ; do
        echo "Waiting for creation of $1"
        sleep 1
    done
}

start() {
        initlog -c "echo -n Starting $SERVICE_NAME: "
        $LOGSTASH_FORWARDER -config=$LF_CONF > $LOGFILE 2>&1 & echo $! > $PIDFILE
        blockUntilFileExist $PIDFILE
        success $"$SERVICE_NAME startup"
        echo
}

stop() {
        initlog -c "echo -n Stopping $SERVICE_NAME: "
        if [ ! -f $PIDFILE ]; then
            echo "process with pid contained in $PIDFILE does not exist"
            exit
        else
            echo "killing process with pid contained in $PIDFILE"
            kill `cat $PIDFILE`
        fi
        echo
}
### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $SERVICE_NAME
        ;;
  restart|reload|condrestart)1
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
exit 0

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多