Last active
August 29, 2015 13:56
-
-
Save t-cyrill/8910202 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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