|
#!upstart |
|
# |
|
# An example upstart script for running a Node.js process as a service |
|
# using Forever as the process monitor. For more configuration options |
|
# associated with Forever, see: https://github.com/nodejitsu/forever |
|
# |
|
# You will need to set the environment variables noted below to conform to |
|
# your use case, and should change the description. |
|
# |
|
description "Example upstart script for a Node.js process" |
|
|
|
start on startup |
|
stop on shutdown |
|
|
|
# This line is needed so that Upstart reports the pid of the Node.js process |
|
# started by Forever rather than Forever's pid. |
|
#expect fork |
|
|
|
# The following environment variables must be set so as to define |
|
# where Node.js and Forever binaries and the Node.js source code |
|
# can be found. |
|
# |
|
# The example environment variables below assume that Node.js is |
|
# installed into /home/node/local/node by building from source as outlined |
|
# here: |
|
# https://www.exratione.com/2011/07/running-a-nodejs-server-as-a-service-using-forever/ |
|
# |
|
# It should be easy enough to adapt to the paths to be appropriate to a |
|
# package installation, but note that the packages available for Ubuntu in |
|
# the default repositories are far behind the times. Most users will be |
|
# building from source to get a more recent Node.js version. |
|
# |
|
# The full path to the directory containing the node and forever binaries. |
|
# env NODE_BIN_DIR="/home/node/local/node/bin" |
|
# Set the NODE_PATH to the Node.js main node_modules directory. |
|
# env NODE_PATH="/home/node/local/node/lib/node_modules" |
|
# The directory containing the application Javascript file. |
|
# env APPLICATION_DIRECTORY="/home/node/my-application" |
|
# The application start Javascript filename. |
|
# env APPLICATION_START="start-my-application.js" |
|
# Log file path. |
|
# env LOG="/var/log/my-application.log" |
|
|
|
env NODE_BIN_DIR="/usr/local/bin/node" |
|
env FOREVER_PATH="/usr/local/bin/forever" |
|
env NODE_PATH="/usr/local/lib/node_modules" |
|
env APPLICATION_DIRECTORY="/home/ubuntu/file-to-text" |
|
env APPLICATION_START="index.js" |
|
env LOG="/root/.forever/forever.log" |
|
env HOME="/home/ubuntu/file-to-text" |
|
env RUN_AS="root" |
|
export HOME |
|
|
|
script |
|
# Add the node executables to the path, which includes Forever if it is |
|
# installed globally, which it should be. |
|
PATH=$NODE_BIN_DIR:$PATH |
|
# The minUptime and spinSleepTime settings stop Forever from thrashing if |
|
# the application fails immediately on launch. This is generally necessary to |
|
# avoid loading development servers to the point of failure every time |
|
# someone makes an error in application initialization code, or bringing down |
|
# production servers the same way if a database or other critical service |
|
# suddenly becomes inaccessible. |
|
exec sudo -u $RUN_AS sh -c " $FOREVER_PATH --sourceDir $APPLICATION_DIRECTORY -a -l $LOG --minUptime 5000 --spinSleepTime 2000 start $APPLICATION_START >> /root/.forever/forever-upstart.log 2>&1" |
|
|
|
end script |
|
|
|
pre-stop script |
|
# Add the node executables to the path. |
|
PATH=$NODE_BIN_DIR:$PATH |
|
# Here we're using the pre-stop script to stop the Node.js application |
|
# process so that Forever is given a chance to do its thing and tidy up |
|
# its data. Note that doing it this way means that each application that |
|
# runs under Forever must have a different start file name, regardless of |
|
# which directory it is in. |
|
exec sudo -u $RUN_AS sh -c " $FOREVER_PATH stop $APPLICATION_START >> $LOG 2>&1" |
|
end script |