Bash脚本启动logstash java脚本
我正在使用AWS EC2和需要运行的自定义脚本:Bash脚本启动logstash java脚本,java,shell,amazon-web-services,boot,logstash,Java,Shell,Amazon Web Services,Boot,Logstash,我正在使用AWS EC2和需要运行的自定义脚本: java -jar logstash-1.3.3-flatjar.jar agent -f shipper.conf 但它似乎只有在我使用ssh连接到服务器并手动运行它之后才起作用。 我找到了这个链接:“ 但这对我没有帮助。如何让bash脚本运行此命令?我甚至尝试创建第二个shell脚本,它只执行我的logstash java脚本。不需要编写自己的initscript,logstash网站和代码。在/etc/init.d/logstash中复制
java -jar logstash-1.3.3-flatjar.jar agent -f shipper.conf
但它似乎只有在我使用ssh连接到服务器并手动运行它之后才起作用。
我找到了这个链接:“
但这对我没有帮助。如何让bash脚本运行此命令?我甚至尝试创建第二个shell脚本,它只执行我的logstash java脚本。不需要编写自己的initscript,logstash网站和代码。在
/etc/init.d/logstash
中复制脚本,然后运行chkconfig--add logstash
和chkconfig logstash on
将其启用;然后,您可以像往常一样使用service
命令对其进行控制。
注意,您需要编辑一个环境变量配置部分,以适应您的系统
#! /bin/sh
#
# /etc/rc.d/init.d/logstash
#
# Starts Logstash as a daemon
#
# chkconfig: 2345 20 80
# description: Starts Logstash as a daemon
# pidfile: /var/run/logstash-agent.pid
### BEGIN INIT INFO
# Provides: logstash
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Logstash
# Description: Starts Logstash as a daemon.
# Modified originally from https://gist.github.com/2228905#file_logstash.sh
### END INIT INFO
### CONFIGURATION
# Amount of memory for Java
#JAVAMEM=256M
# Location of logstash files
LOCATION=/opt/logstash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DESC="Logstash Daemon"
NAME=java
DAEMON=$(which java)
CONFIG_DIR=/opt/logstash/logstash.conf
LOGFILE=/opt/logstash/logstash.log
JARNAME=logstash-monolithic.jar
#ARGS="-Xmx$JAVAMEM -Xms$JAVAMEM -jar ${JARNAME} agent --config ${CONFIG_DIR} --log ${LOGFILE} --grok-patterns-path ${PATTERNSPATH}"
ARGS="-jar ${JARNAME} agent --config ${CONFIG_DIR} --log ${LOGFILE}"
SCRIPTNAME=/etc/init.d/logstash
PIDFILE=/var/run/logstash.pid
base=logstash
### END CONFIGURATION
# Exit if the package is not installed
if [ ! -x "$DAEMON" ]; then
{
echo "Couldn't find $DAEMON"
exit 99
}
fi
. /etc/init.d/functions
#
# Function that starts the daemon/service
#
do_start()
{
cd $LOCATION && \
($DAEMON $ARGS &) \
&& success || failure
}
set_pidfile()
{
pgrep -f "$DAEMON[[:space:]]*$ARGS" > $PIDFILE
}
#
# Function that stops the daemon/service
#
do_stop()
{
pid=`cat $PIDFILE`
if checkpid $pid 2>&1; then
# TERM first, then KILL if not dead
kill -TERM $pid >/dev/null 2>&1
usleep 100000
if checkpid $pid && sleep 1 &&
checkpid $pid && sleep $delay &&
checkpid $pid ; then
kill -KILL $pid >/dev/null 2>&1
usleep 100000
fi
fi
checkpid $pid
RC=$?
[ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
}
case "$1" in
start)
echo -n "Starting $DESC: "
do_start
touch /var/lock/subsys/$JARNAME
set_pidfile
;;
stop)
echo -n "Stopping $DESC: "
do_stop
rm /var/lock/subsys/$JARNAME
rm $PIDFILE
;;
restart|reload)
echo -n ""Restarting $DESC: "
do_stop
do_start
touch /var/lock/subsys/$JARNAME
set_pidfile
;;
status)
status -p $PIDFILE
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac
echo
exit 0
最好的方法是创建一个init脚本,该脚本可以为您启动任务,并将该init脚本放入默认运行列表中。如何做到这一点取决于您的分布。在upstart中,您可以非常轻松地完成这项工作(这非常棒,因为它可以进行pid管理等),但这只适用于某些发行版(基于ubuntu,可能还有其他发行版)。你能在你提供的链接中提供关于你的结果的信息吗?他们似乎在正确的轨道上。当我尝试该方法时,实例无法启动。也许我做得不对。我正在运行fedora 17 btw。谢谢!不过,此脚本中有一个输入错误:restart | reload)echo-n“Restarting$DESC:”应仅为:restart | reload)echo-n“Restarting$DESC:“我不得不在脚本中添加sincedb_路径。但是现在,当我运行servicelogstashstart时,提示就挂起了。虽然它正在运行,但我不确定它为什么会这样做。并且/var/log/messages中填充了:3月10日13:00:07 localhost logstash[592]:\。不知道那里发生了什么。