Skip to content

Instantly share code, notes, and snippets.

@jlyon
Last active December 28, 2015 01:39
Show Gist options
  • Save jlyon/7422013 to your computer and use it in GitHub Desktop.
Save jlyon/7422013 to your computer and use it in GitHub Desktop.

Startup task methods in Ubuntu

Upstart

From: Stack Overflow post

  • Install upstart
sudo apt-get install upstart
  • Add a version of the upstart.sh file below to /etc/init
  • Start your app: sudo start yourappname

You can also start/stop/check status of scripts from the commandline:

start yourappname
stop yourappname
status yourappname

Crontab

From: http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

add a @reboot entry to crontab crontab -e:

@reboot /home/vivek/bin/installnetkit.sh

You also need to enable the @reboot startup task:

update-rc.d cron defaults

Examples:

@reboot ec2-associate-address $EC2_ELASTIC_IP -i $EC2_INSTANCE_ID

@reboot "forever -m10 start /usr/share/tilemill/index.js --server=true --listen$

@reboot echo "asdf" > /tmp/reboot.txt

rc.local

Just edit the /etc/rc.local file and add whatever calls you want before exit 0:

ec2-associate-address $EC2_ELASTIC_IP -i $EC2_INSTANCE_ID

init.d

For details, see https://help.ubuntu.com/community/UbuntuBootupHowto.

@todo: add other alternatives

#!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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment