mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
234 lines
5.6 KiB
Bash
Executable File
234 lines
5.6 KiB
Bash
Executable File
#!/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 which 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
|