Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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
- # 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=/dev/null
- 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 \
- --chuid $USER:$GROUP \
- --start \
- --quiet \
- --pidfile $PIDFILE \
- --exec $DAEMON \
- -- \
- -pidfile $PIDFILE \
- -config $CONFIG \
- $INFLUXD_OPTS >>$STDOUT 2>>$STDERR &
- else
- local CMD="$DAEMON -pidfile $PIDFILE -config $CONFIG $INFLUXD_OPTS >>$STDOUT 2>>$STDERR &"
- su -s /bin/sh -c "$CMD" $USER
- fi
- # Sleep to verify process is still up
- sleep 1
- if [ -f $PIDFILE ]; then
- # PIDFILE exists
- if kill -0 $(cat $PIDFILE) &>/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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement