Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Other: bootstrap script for Amazon Linux AMI #518

Merged
merged 3 commits into from
Aug 4, 2015
Merged

Other: bootstrap script for Amazon Linux AMI #518

merged 3 commits into from
Aug 4, 2015

Conversation

zabeth129
Copy link
Contributor

bootstrap script for amazon linux (centos)

I need bootstrap script for not Ubuntu but amazon Linux, so I created bootstrap script for amazon linux.
I fixed some packages name and added some process for amazon linux

  • bootstrap_amazon_linux.sh

I want to share my scripts and want everyone to use them.
However, I would like you @arikfr (you are the main committer, right?) to add some config scripts to https://raw.githubusercontent.com/EverythingMe/redash/docs_setup/setup/files/

I confirmed that my scripts work, but they should not be perfect, so I'm happy to receive anyone's comments to improve them.

additional scripts to upload

I would like you to add the following files to https://raw.githubusercontent.com/EverythingMe/redash/docs_setup/setup/files/

  • redash_supervisord_init_for_amazon_linux ( for /etc/init.d/redash_supervisord )
  • supervisord_for_amazon_linux.conf ( for /opt/redash/supervisord/supervisord.conf )

details are as follows.

redash_supervisord_init_for_amazon_linux

before

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

after

. /etc/rc.d/init.d/functions

Overall

#!/bin/sh
# /etc/init.d/redash_supervisord
### BEGIN INIT INFO
# Provides:          supervisord
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: process supervisor
### END INIT INFO

# Author: Ron DuPlain <ron.duplain@gmail.com>

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
NAME=supervisord
DESC="process supervisor"
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="--configuration /opt/redash/supervisord/supervisord.conf "
PIDFILE=/opt/redash/supervisord/supervisord.pid
SCRIPTNAME=/etc/init.d/redash_supervisord
USER=redash

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /etc/rc.d/init.d/functions

#
# Function that starts the daemon/service
#

do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --pidfile $PIDFILE --user $USER --chuid $USER --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --user $USER --chuid $USER --exec $DAEMON -- \
        $DAEMON_ARGS \
        || return 2
    # Add code here, if necessary, that waits for the process to be ready
    # to handle requests from services started subsequently which depend
    # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#

do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --user $USER --chuid $USER --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    # Wait for children to finish too if this is a daemon that forks
    # and if the daemon is only ever run from this initscript.
    # If the above conditions are not satisfied then add some other code
    # that waits for the process to drop all resources that could be
    # needed by services started subsequently.  A last resort is to
    # sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --user $USER --chuid $USER --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && echo 0 ;;
        2) [ "$VERBOSE" != no ] && echo 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && echo 0 ;;
        2) [ "$VERBOSE" != no ] && echo 1 ;;
    esac
    ;;
  status)
       status -p "$STASH_PID" stash
       # status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  restart)
    echo "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) echo 0 ;;
            1) echo 1 ;; # Old process is still running
            *) echo 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        echo 1
        ;;
    esac
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
    exit 3
    ;;
esac

:

supervisord.conf

Before

command=/opt/redash/current/bin/run gunicorn -b 127.0.0.1:5000 --name redash -w 4 redash.wsgi:app
command=/opt/redash/current/bin/run /usr/local/bin/celery worker --app=redash.worker --beat -Qqueries,celery,scheduled_queries

After

command=/opt/redash/current/bin/run /usr/local/bin/gunicorn -b 127.0.0.1:5000 --name redash -w 4 redash.wsgi:app
command=/opt/redash/current/bin/run celery worker --app=redash.worker --beat -Qqueries,celery,scheduled_queries

Overall

[supervisord]
nodaemon=false
logfile=/opt/redash/logs/supervisord.log
pidfile=/opt/redash/supervisord/supervisord.pid
directory=/opt/redash/current

[inet_http_server]
port = 127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:redash_server]
command=/opt/redash/current/bin/run /usr/local/bin/gunicorn -b 127.0.0.1:5000 --name redash -w 4 redash.wsgi:app
process_name=redash_server
numprocs=1
priority=999
autostart=true
autorestart=true
stdout_logfile=/opt/redash/logs/api.log
stderr_logfile=/opt/redash/logs/api_error.log

[program:redash_celery]
command=/opt/redash/current/bin/run /usr/local/bin/celery worker --app=redash.worker --beat -Qqueries,celery,scheduled_queries
process_name=redash_celery
numprocs=1
priority=999
autostart=true
autorestart=true
stdout_logfile=/opt/redash/logs/celery.log
stderr_logfile=/opt/redash/logs/celery_error.log

the fixed pathes will work if my original files are uploaded
@arikfr
Copy link
Member

arikfr commented Jul 31, 2015

About the file that needs to be changed/added: just add them to the pull request and update them in the pull request, while changing the base path from https://raw.githubusercontent.com/EverythingMe/redash/docs_setup/setup/files/ to https://raw.githubusercontent.com/EverythingMe/redash/master/setup/files/.

Also how about moving the common parts (creating folders, installing dependencies, etc) to another scripts, that will be used both by this one and the bootstrap.sh script?

@landscape-bot
Copy link

Code Health
Code quality remained the same when pulling a3cb698 on massaru129:feature/bootstrap_amazon_linux into d155f16 on EverythingMe:master.

@zabeth129
Copy link
Contributor Author

OK, I'll try.

@landscape-bot
Copy link

Code Health
Code quality remained the same when pulling 0e46a24 on massaru129:feature/bootstrap_amazon_linux into d155f16 on EverythingMe:master.

@arikfr arikfr changed the title created bootstrap script for amazon linux Other: created bootstrap script for Amazon Linux AMI Aug 4, 2015
@arikfr arikfr changed the title Other: created bootstrap script for Amazon Linux AMI Other: bootstrap script for Amazon Linux AMI Aug 4, 2015
arikfr added a commit that referenced this pull request Aug 4, 2015
Other: created bootstrap script for amazon linux
@arikfr arikfr merged commit 4a18fa0 into getredash:master Aug 4, 2015
@arikfr
Copy link
Member

arikfr commented Aug 4, 2015

Merged. Thanks!

@zabeth129
Copy link
Contributor Author

Thank you!

I didn't have time to create common scripts.
I'd like to do it in the future.

@arikfr
Copy link
Member

arikfr commented Aug 6, 2015

That will be great. Just open another pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants