Skip to content

Instantly share code, notes, and snippets.

@t-cyrill
Last active August 29, 2015 13:56
Show Gist options
  • Save t-cyrill/8910202 to your computer and use it in GitHub Desktop.
Save t-cyrill/8910202 to your computer and use it in GitHub Desktop.
#! /bin/sh
### BEGIN INIT INFO
# Provides: <%= app %>
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Generated initscript for <%= app %>
# Description: This file starts <%= app %>. It should be placed in /etc/init.d
### END INIT INFO
# Author: Foreman generator
#
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Runs <%= app %>"
NAME=<%= app %>
SCRIPTNAME=/etc/init.d/$NAME
USERNAME=<%= user %>
PIDDIR=/home/$USERNAME/$NAME/shared/pids
BUNDLE_GEMFILE=/home/$USERNAME/$NAME/current/Gemfile
DAEMON=`sh -c 'cd <%= engine.root %>; export PATH="/usr/local/rbenv/bin:$PATH"; eval "$(rbenv init -)"; which ruby'`
export BUNDLE_GEMFILE
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
[ -r /lib/init/vars.sh ] && . /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.
[ -r /lib/lsb/init-functions ] &&. /lib/lsb/init-functions
waitpid() {
for pid in "$@"; do
while kill -0 "$pid" >/dev/null 2>&1; do
sleep 1
done
done
}
#
# Function that starts the daemon/service
#
do_start()
{
mkdir -p $PIDDIR
mkdir -p <%= log %>
chown $USERNAME: <%= log %>
# START APPLICATION: <%= app %>
<% engine.each_process do |name, process| %>
# START PROCESS: <%= name %>
<% 1.upto(engine.formation[name]) do |num| %>
if [ -f "$PIDDIR/<%= name %>.<%= num %>.pid" ]; then
kill -0 "$pid" >/dev/null 2>&1;
if [ $? = 0 ]; then
return 1
fi
fi
# START CONCURRENT: <%= num %>
# Start: <%= app %>.<%= name %>.<%= num %>
# Create $PIDDIR/<%= name %>.<%= num %>.pid
sh -c 'cd <%= engine.root %>; export RBENV_ROOT="/usr/local/rbenv"; export PATH="/usr/local/rbenv/bin:$PATH"; eval "$(rbenv init -)"; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $!' > $PIDDIR/<%= name %>.<%= num %>.pid
<% end %>
<% end %>
}
#
# Function that stops the daemon/service
#
do_stop()
{
# STOP APPLICATION: <%= app %>
<% engine.each_process do |name, process| %>
# STOP PROCESS: <%= name %>
<% 1.upto(engine.formation[name]) do |num| %>
# STOP CONCURRENT: <%= num %>
# Stop: <%= app %>.<%= name %>.<%= num %>
kill -QUIT `cat $PIDDIR/<%= name %>.<%= num %>.pid`
waitpid `cat $PIDDIR/<%= name %>.<%= num %>.pid`
rm $PIDDIR/<%= name %>.<%= num %>.pid
<% end %>
<% end %>
rmdir $PIDDIR
}
#
# Function that reloads the daemon/service
#
do_reload()
{
# RELOAD APPLICATION: <%= app %>
<% engine.each_process do |name, process| %>
# RELOAD PROCESS: <%= name %>
<% 1.upto(engine.formation[name]) do |num| %>
# RELOAD CONCURRENT: <%= num %>
# Reload: <%= app %>.<%= name %>.<%= num %>
kill -HUP `cat $PIDDIR/<%= name %>.<%= num %>.pid`
<% end %>
<% end %>
}
#
# Function that statuses the daemon/service
#
do_status()
{
# STATUS APPLICATION: <%= app %>
<% engine.each_process do |name, process| %>
# STATUS PROCESS: <%= name %>
<% 1.upto(engine.formation[name]) do |num| %>
# STATUS CONCURRENT: <%= num %>
# Status: <%= app %>.<%= name %>.<%= num %>
status_of_proc -p "$PIDDIR/<%= name %>.<%= num %>.pid" "$DAEMON" "$NAME" && return 0 || return $?
<% end %>
<% end %>
}
do_restart_usr2()
{
# RESTART APPLICATION: <%= app %>
<% engine.each_process do |name, process| %>
# RESTART PROCESS: <%= name %>
<% 1.upto(engine.formation[name]) do |num| %>
# RESTART CONCURRENT: <%= num %>
# RESTART: <%= app %>.<%= name %>.<%= num %>
kill -USR2 `cat $PIDDIR/<%= name %>.<%= num %>.pid`
<% end %>
<% end %>
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
do_status
;;
reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart|force-reload)
do_restart_usr2
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
# echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment