Last active
August 29, 2015 14:00
-
-
Save stolsma/11212534 to your computer and use it in GitHub Desktop.
Revisions
-
stolsma revised this gist
Apr 23, 2014 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,7 @@ Init Script =========== From: [source](https://www.exratione.com/2013/02/nodejs-and-forever-as-a-service-simple-upstart-and-init-scripts-for-ubuntu/) Init scripts hopefully need no explanation. Scripts reside in /etc/init.d with root ownership and executable permissions. e.g.: -
stolsma created this gist
Apr 23, 2014 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,185 @@ Init Script Init scripts hopefully need no explanation. Scripts reside in /etc/init.d with root ownership and executable permissions. e.g.: ``` bash sudo su cp my-application-script /etc/init.d/my-application chmod a+x /etc/init.d/my-application ``` After putting the script in place, you should update the system service definitions: ``` bash update-rc.d my-application defaults ``` Run or check on the script and its process with the following commands: ``` bash service my-application start service my-application status service my-application restart service my-application stop ``` Here is an example init script for a Node.js service running under Forever: ``` bash #!/bin/bash # # An example init 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 change the init info comment block. # # This was written for Debian distributions such as Ubuntu, but should still # work on RedHat, Fedora, or other RPM-based distributions, since none # of the built-in service functions are used. If you do adapt it to a RPM-based # system, you'll need to replace the init info comment block with a chkconfig # comment block. # ### BEGIN INIT INFO # Provides: my-application # Required-Start: $syslog $remote_fs # Required-Stop: $syslog $remote_fs # Should-Start: $local_fs # Should-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: My Application # Description: My Application ### END INIT INFO # # Based on: # https://gist.github.com/3748766 # https://github.com/hectorcorrea/hectorcorrea.com/blob/master/etc/forever-initd-hectorcorrea.sh # https://www.exratione.com/2011/07/running-a-nodejs-server-as-a-service-using-forever/ # Source function library. Note that this isn't used here, but remains to be # uncommented by those who want to edit this script to add more functionality. # Note that this is Ubuntu-specific. The scripts and script location are different on # RPM-based distributions. # . /lib/lsb/init-functions # 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. # # An application name to display in echo text. # NAME="My Application" # The full path to the directory containing the node and forever binaries. # NODE_BIN_DIR=/home/node/local/node/bin # Set the NODE_PATH to the Node.js main node_modules directory. # NODE_PATH=/home/node/local/node/lib/node_modules # The directory containing the application start Javascript file. # APPLICATION_DIRECTORY=/home/node/my-application # The application start Javascript filename. # APPLICATION_START=start-my-application.js # Process ID file path. # PIDFILE=/var/run/my-application.pid # Log file path. # LOGFILE=/var/log/my-application.log # NAME= NODE_BIN_DIR= NODE_PATH= APPLICATION_DIRECTORY= APPLICATION_START= PIDFILE= LOGFILE= # Add node to the path for situations in which the environment is passed. PATH=$NODE_BIN_DIR:$PATH # Export all environment variables that must be visible for the Node.js # application process forked by Forever. It will not see any of the other # variables defined in this script. export NODE_PATH=$NODE_PATH start() { echo "Starting $NAME" # We're calling forever directly without using start-stop-daemon for the # sake of simplicity when it comes to environment, and because this way # the script will work whether it is executed directly or via the service # utility. # # 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. # # The pidfile contains the child process pid, not the forever process pid. # We're only using it as a marker for whether or not the process is # running. forever --pidFile $PIDFILE --sourceDir $APPLICATION_DIRECTORY \ -a -l $LOGFILE --minUptime 5000 --spinSleepTime 2000 \ start $APPLICATION_START & RETVAL=$? } stop() { if [ -f $PIDFILE ]; then echo "Shutting down $NAME" # Tell Forever to stop the process. Note that doing it this way means # that each application that runs as a service must have a different # start file name, regardless of which directory it is in. forever stop $APPLICATION_START # Get rid of the pidfile, since Forever won't do that. rm -f $PIDFILE RETVAL=$? else echo "$NAME is not running." RETVAL=0 fi } restart() { echo "Restarting $NAME" stop start } status() { echo "Status for $NAME:" # This is taking the lazy way out on status, as it will return a list of # all running Forever processes. You get to figure out what you want to # know from that information. # # On Ubuntu, this isn't even necessary. To find out whether the service is # running, use "service my-application status" which bypasses this script # entirely provided you used the service utility to start the process. forever list RETVAL=$? } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) restart ;; *) echo "Usage: {start|stop|status|restart}" exit 1 ;; esac exit $RETVAL ```