Скрипт Bash для запуска java-скрипта logstash

Я использую AWS EC2 и собственный скрипт, который нужно запустить:

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

Но это работает только после того, как я подключился к серверу по ssh и запустил его вручную. Я нашел эту ссылку: "Linux Launch Java-программа при запуске (экземпляр EC2) "

Но это мне не помогло. Как я могу заставить свой bash-скрипт запустить эту команду? Я даже пытался создать второй сценарий оболочки, который выполняет только мой java-скрипт logstash.


person Gabriel    schedule 07.03.2014    source источник
comment
Лучше всего создать сценарий инициализации, который может запустить задачу для вас, и поместить этот сценарий инициализации в ваш список выполнения по умолчанию. Как это сделать, зависит от вашего дистрибутива. Вы можете сделать это очень легко в выскочке (что здорово, потому что он может управлять pid и т. Д.), Но это работает только в некоторых дистрибутивах (на основе Ubuntu, возможно, в других). Можете ли вы предоставить информацию о ваших результатах с помощью метода по предоставленной вами ссылке? Казалось, они были на правильном пути.   -  person Daniel Farrell    schedule 08.03.2014
comment
Когда я попробовал этот метод, экземпляр не смог загрузиться. Может быть, я не сделал это правильно. Я использую Fedora 17, кстати.   -  person Gabriel    schedule 09.03.2014


Ответы (1)


Нет необходимости писать собственный сценарий инициализации, веб-сайт 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
person guido    schedule 09.03.2014
comment
Спасибо! Однако в этом скрипте есть опечатка: перезапуск|перезагрузка) echo -n Перезапуск $DESC: должно быть только: перезапуск|перезагрузка) echo -n Перезапуск $DESC: - person Gabriel; 10.03.2014
comment
Мне пришлось добавить в мой скрипт с db_path. Но теперь, когда я запускаю службу logstash start, приглашение просто зависает. Хотя он работает, но я не уверен, почему он это делает. - person Gabriel; 10.03.2014
comment
и /var/log/messages заполняется: 10 марта 13:00:07 localhost logstash[592]: \\\\\\\\\\\\\\. Понятия не имею, что там происходит. - person Gabriel; 10.03.2014