如何让logstash在Ubuntu12.04上作为服务运行,在Ubuntu12.04中,进程由root以外的用户拥有?

如何让logstash在Ubuntu12.04上作为服务运行,在Ubuntu12.04中,进程由root以外的用户拥有?,ubuntu,logstash,init.d,Ubuntu,Logstash,Init.d,我正在尝试让logstash作为一个由root以外的用户拥有的服务运行。init.d脚本如下所示: #/垃圾箱/垃圾箱 ###开始初始化信息 #提供:tlogserver #必需的开始:$local_fs$network$named$time$syslog #所需停止:$local_fs$network$named$time$syslog #默认开始:2 3 4 5 #默认停止:0 1 6 #简短描述:日志服务器 #描述:Talend Logstash服务 ###结束初始化信息 #如果路径在mo

我正在尝试让logstash作为一个由root以外的用户拥有的服务运行。init.d脚本如下所示:

#/垃圾箱/垃圾箱
###开始初始化信息
#提供:tlogserver
#必需的开始:$local_fs$network$named$time$syslog
#所需停止:$local_fs$network$named$time$syslog
#默认开始:2 3 4 5
#默认停止:0 1 6
#简短描述:日志服务器
#描述:Talend Logstash服务
###结束初始化信息
#如果路径在mountnfs.sh脚本之后运行,则仅应包括/usr/*路径
路径=/usr/sbin:/usr/bin:/sbin:/bin
如果[“X${TALEND_LOGSERV}”=“X”];然后
TALEND_LOGSERV=“/opt/TALEND/LOGSERV”
fi
如果[“X${TALEND_RUN}”=“X”];然后
TALEND_RUN=“/opt/TALEND/RUN”
fi
DESC=“TAC的日志存储服务”
APP_NAME=“tlogserver”
DAEMON_START=“${TALEND_LOGSERV}/START_logserver.sh”
守护进程\u开始\u参数=“”
DAEMON_STOP=“${TALEND_LOGSERV}/STOP_logserver.sh”
DAEMON_STOP_ARGS=“”
PIDFILE=“${TALEND_RUN}/${APP_NAME}.pid”
以=“tomcat7”的方式运行
运行\u GRP=“tomcat7”
SCRIPTNAME=“/etc/init.d/${APP_NAME}”
#如果未安装程序包,请退出
[-x“${DAEMON_START}”]| |“未安装该守护程序”
#读取配置变量文件(如果存在)
[-r/etc/default/${APP_NAME}]&&/etc/default/${APP_NAME}
#加载详细设置和其他rcS变量
[-f/etc/default/rcS]&&&/etc/default/rcS
#定义LSB log_*函数。
#依赖lsb base(>=3.0-6)以确保此文件存在。
. /lib/lsb/init函数
#
#启动守护进程/服务的函数
#
你要开始吗{
start-stop守护进程--start--quiet--background--chuid${RUN_AS}:${RUN_GRP}--make pidfile--pidfile${pidfile}--exec${daemon_start}--test>/dev/null\
||返回1
start-stop守护进程--start--quiet--background--chuid${RUN_AS}:${RUN_GRP}--make pidfile--pidfile${pidfile}--exec${daemon_start}--\
${DAEMON_ARGS}\
||返回2
}
#
#停止守护进程/服务的函数
#
停止{
start-stop守护进程--start--quiet--background--chuid${RUN_AS}:${RUN_GRP}--make-pidfile--pidfile${pidfile}--exec${daemon_-stop}--test>/dev/null\
||返回1
start-stop守护进程--start--quiet--background--chuid${RUN_AS}:${RUN_GRP}--make-pidfile--pidfile${pidfile}--exec${daemon_-stop}--\
${DAEMON_ARGS}\
||返回2
}
案件“$1”
开始)
[“${VERBOSE}”!=no]&&log\u daemon\u msg“启动${DESC}”“${APP\u NAME}”
你要开始吗
中的大小写“$?”
0 | 1)[“${VERBOSE}”!=no]&&log_end_msg 0;;
2) [“${VERBOSE}”!=no]&&log\u end\u msg 1;;
以撒
;;
(停止)
[“${VERBOSE}”!=no]&&log\u daemon\u msg“Stopping${DESC}”“${APP\u NAME}”
你停下来吗
中的大小写“$?”
0 | 1)[“${VERBOSE}”!=no]&&log_end_msg 0;;
2) [“${VERBOSE}”!=no]&&log\u end\u msg 1;;
以撒
;;
重新启动(强制重新加载)
#
#如果实现了“重新加载”选项,则删除
#“强制重新加载”别名
#
log_daemon_msg“重新启动${DESC}”“${APP_NAME}”
你停下来吗
中的大小写“$?”
0|1)
你要开始吗
中的大小写“$?”
0)日志结束消息0;;
1) 日志结束消息1;#旧进程仍在运行
*)日志结束消息1;#启动失败
以撒
;;
*)
#未能停止
日志\u结束\u消息1
;;
以撒
;;
*)
echo“用法:${SCRIPTNAME}{start | stop | restart}>&2
出口3
;;
以撒
当我将其作为服务运行时,我获得了成功的返回代码,但是当我查找它时,日志存储过程没有运行。启动日志服务器脚本如下所示:

if[“X${TALEND_LOGSERV}”=“X”];然后
TALEND_LOGSERV=“/opt/TALEND/LOGSERV”
fi
cd“$TALEND_LOGSERV”
#/logstash-1.4.2/bin/logstash-agent-f logstash-talend.conf-l/var/log/talend/logserv.log>/dev/null 2>&1&2
echo`pwd`>&2
./logstash-1.4.2/bin/logstash agent-f logstash-talend.conf-l/var/log/talend/logserv.log
回声$!

@Magnus在一条评论中提供了一个链接,效果非常好()。他最初的评论是:

你有没有理由不把它作为出发点?另外,您是否尝试过使用-x运行这些shell脚本以列出所有要运行的命令?最后一句话,start-stop守护进程捕获的pid不是shell脚本的pid,而是Logstash进程的pid吗


可以为
sysv
/
upstart
/
systemd
生成
logstash
的服务脚本,其中包括:

LS_HOME=/usr/share/logstash

# use ONE of the following:
${LS_HOME}/bin/system-install ${LS_HOME}/config/startup.options sysv
${LS_HOME}/bin/system-install ${LS_HOME}/config/startup.options upstart
${LS_HOME}/bin/system-install ${LS_HOME}/config/startup.options systemd

默认情况下,这些脚本的运行方式为
logstash:logstash

您没有使用这些脚本的原因是什么?另外,您是否尝试过使用
-x
运行这些shell脚本来列出所有运行的命令?最后一句话,start-stop守护进程捕获的pid不是shell脚本的pid,而是Logstash进程的pid吗?Magnus,我之所以不使用与第三方安装捆绑在一起的init脚本,是因为它没有将拥有的用户更改为root以外的其他用户的代码。你链接到的脚本工作得很好。谢谢@Magnubsäck当我运行Logstash附带的原始init脚本时,它会显示“Logstash已启动”,但一旦我尝试检查状态,就会收到“Logstash未运行”消息。有什么是我做错的吗?