【发布时间】: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”并不是您认为的那样,并且无法与任何正在运行的进程名称匹配。祝你好运!