| #!/bin/bash |
| ### BEGIN INIT INFO |
| # Provides: influxd |
| # Required-Start: $all |
| # Required-Stop: $remote_fs $syslog |
| # Default-Start: 2 3 4 5 |
| # Default-Stop: 0 1 6 |
| # Short-Description: Start the InfluxDB process |
| ### END INIT INFO |
| set -x |
| # If you modify this, please make sure to also edit influxdb.service |
| |
| # Command-line options that can be set in /etc/default/influxdb. These will override |
| # any config file values. |
| DEFAULT=/etc/default/influxdb |
| |
| # Daemon options |
| INFLUXD_OPTS= |
| |
| # Process name ( For display ) |
| NAME=influxdb |
| |
| # User and group |
| USER=influxdb |
| GROUP=influxdb |
| |
| # Check for sudo or root privileges before continuing |
| if [ "$UID" != "0" ]; then |
| echo "You must be root to run this script" |
| exit 1 |
| fi |
| |
| # Daemon name, where is the actual executable If the daemon is not |
| # there, then exit. |
| DAEMON=/usr/bin/influxd |
| if [ ! -x $DAEMON ]; then |
| echo "Executable $DAEMON does not exist!" |
| exit 5 |
| fi |
| |
| # Configuration file |
| CONFIG=/etc/influxdb/influxdb.conf |
| |
| # PID file for the daemon |
| PIDFILE=/var/run/influxdb/influxd.pid |
| PIDDIR=`dirname $PIDFILE` |
| if [ ! -d "$PIDDIR" ]; then |
| mkdir -p $PIDDIR |
| chown $USER:$GROUP $PIDDIR |
| fi |
| |
| # Max open files |
| OPEN_FILE_LIMIT=65536 |
| |
| if [ -r /lib/lsb/init-functions ]; then |
| source /lib/lsb/init-functions |
| fi |
| |
| # Logging |
| if [ -z "$STDOUT" ]; then |
| STDOUT=/var/log/influxdb/influxd.log |
| fi |
| |
| if [ ! -f "$STDOUT" ]; then |
| mkdir -p $(dirname $STDOUT) |
| fi |
| |
| if [ -z "$STDERR" ]; then |
| STDERR=/var/log/influxdb/influxd.log |
| fi |
| |
| if [ ! -f "$STDERR" ]; then |
| mkdir -p $(dirname $STDERR) |
| fi |
| |
| # Override init script variables with DEFAULT values |
| if [ -r $DEFAULT ]; then |
| source $DEFAULT |
| fi |
| |
| function log_failure_msg() { |
| echo "$@" "[ FAILED ]" |
| } |
| |
| function log_success_msg() { |
| echo "$@" "[ OK ]" |
| } |
| |
| function start() { |
| # Check if config file exist |
| if [ ! -r $CONFIG ]; then |
| log_failure_msg "config file $CONFIG doesn't exist (or you don't have permission to view)" |
| exit 4 |
| fi |
| |
| # Check that the PID file exists, and check the actual status of process |
| if [ -f $PIDFILE ]; then |
| PID="$(cat $PIDFILE)" |
| if kill -0 "$PID" &>/dev/null; then |
| # Process is already up |
| log_success_msg "$NAME process is already running" |
| return 0 |
| fi |
| else |
| su -s /bin/sh -c "touch $PIDFILE" $USER &>/dev/null |
| if [ $? -ne 0 ]; then |
| log_failure_msg "$PIDFILE not writable, check permissions" |
| exit 5 |
| fi |
| fi |
| |
| # Bump the file limits, before launching the daemon. These will |
| # carry over to launched processes. |
| ulimit -n $OPEN_FILE_LIMIT |
| if [ $? -ne 0 ]; then |
| log_failure_msg "Unable to set ulimit to $OPEN_FILE_LIMIT" |
| exit 1 |
| fi |
| |
| # Launch process |
| echo "Starting $NAME..." |
| if command -v start-stop-daemon &>/dev/null; then |
| start-stop-daemon \ |
| --background \ |
| --chuid $USER:$GROUP \ |
| --start \ |
| --quiet \ |
| --pidfile $PIDFILE \ |
| --exec $DAEMON \ |
| -- \ |
| -config $CONFIG \ |
| $INFLUXD_OPTS >>$STDOUT 2>>$STDERR |
| else |
| local CMD="$DAEMON -config $CONFIG $INFLUXD_OPTS >>$STDOUT 2>>$STDERR &" |
| su -s /bin/sh -c "$CMD" $USER |
| fi |
| |
| # Sleep to verify process is still up |
| sleep 1 |
| echo $(pidof influxd) > $PIDFILE |
| if [ -f $PIDFILE ]; then |
| # PIDFILE exists |
| PID="$(cat $PIDFILE)" |
| if kill -0 "$PID" &>/dev/null; then |
| # PID up, service running |
| log_success_msg "$NAME process was started" |
| return 0 |
| fi |
| fi |
| log_failure_msg "$NAME process was unable to start" |
| exit 1 |
| } |
| |
| function stop() { |
| # Stop the daemon. |
| if [ -f $PIDFILE ]; then |
| local PID="$(cat $PIDFILE)" |
| if kill -0 $PID &>/dev/null; then |
| echo "Stopping $NAME..." |
| # Process still up, send SIGTERM and remove PIDFILE |
| kill -s TERM $PID &>/dev/null && rm -f "$PIDFILE" &>/dev/null |
| n=0 |
| while true; do |
| # Enter loop to ensure process is stopped |
| kill -0 $PID &>/dev/null |
| if [ "$?" != "0" ]; then |
| # Process stopped, break from loop |
| log_success_msg "$NAME process was stopped" |
| return 0 |
| fi |
| |
| # Process still up after signal, sleep and wait |
| sleep 1 |
| n=$(expr $n + 1) |
| if [ $n -eq 30 ]; then |
| # After 30 seconds, send SIGKILL |
| echo "Timeout exceeded, sending SIGKILL..." |
| kill -s KILL $PID &>/dev/null |
| elif [ $? -eq 40 ]; then |
| # After 40 seconds, error out |
| log_failure_msg "could not stop $NAME process" |
| exit 1 |
| fi |
| done |
| fi |
| fi |
| log_success_msg "$NAME process already stopped" |
| } |
| |
| function restart() { |
| # Restart the daemon. |
| stop |
| start |
| } |
| |
| function status() { |
| # Check the status of the process. |
| if [ -f $PIDFILE ]; then |
| PID="$(cat $PIDFILE)" |
| if kill -0 $PID &>/dev/null; then |
| log_success_msg "$NAME process is running" |
| exit 0 |
| fi |
| fi |
| log_failure_msg "$NAME process is not running" |
| exit 1 |
| } |
| |
| case $1 in |
| start) |
| start |
| ;; |
| |
| stop) |
| stop |
| ;; |
| |
| restart) |
| restart |
| ;; |
| |
| status) |
| status |
| ;; |
| |
| version) |
| $DAEMON version |
| ;; |
| |
| *) |
| # For invalid arguments, print the usage message. |
| echo "Usage: $0 {start|stop|restart|status|version}" |
| exit 2 |
| ;; |
| esac |