【问题标题】:Bash script to start logstash java script启动logstash java脚本的bash脚本
【发布时间】:2014-03-07 22:16:05
【问题描述】:

我正在使用 AWS EC2 和需要运行的自定义脚本:

java -jar logstash-1.3.3-flatjar.jar agent -f shipper.conf

但它似乎只有在我 ssh 进入服务器并手动运行后才能工作。 我找到了这个链接:“Linux Launch java program on startup (EC2 instance)

但这对我没有帮助。如何让我的 bash 脚本运行此命令?我什至尝试创建第二个 shell 脚本,它只执行我的 logstash java 脚本。

【问题讨论】:

  • 您最好的办法是创建一个可以为您启动任务的初始化脚本,并将该初始化脚本放入您的默认运行列表中。如何执行此操作取决于您的发行版。您可以在 upstart 中非常轻松地做到这一点(这很棒,因为它可以进行 pid 管理等),但这仅适用于某些发行版(基于 ubuntu,也许还有其他发行版)。您能否使用您提供的链接中的方法提供有关结果的信息?他们似乎走在了正确的轨道上。
  • 当我尝试该方法时,实例无法启动。也许我没有做对。我正在运行 Fedora 17 顺便说一句。

标签: java shell amazon-web-services boot logstash


【解决方案1】:

无需自己编写initscript,logstash网站provides代码。复制/etc/init.d/logstash中的脚本,然后运行chkconfig --add logstashchkconfig 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

【讨论】:

  • 谢谢!这个脚本中有一个错字:restart|reload) echo -n ""Restarting $DESC:" 应该只是:restart|reload) echo -n "Restarting $DESC:"
  • 我必须将 sincedb_path 添加到我的脚本中。但是现在当我运行 service logstash start 时,提示只是挂起。虽然它正在运行,但我不确定它为什么会这样做。
  • 并且 /var/log/messages 正在填充:3 月 10 日 13:00:07 localhost logstash[592]: \\\\\\\\\\\\\\.不知道那里发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
相关资源
最近更新 更多