mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			175 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #! /usr/bin/env bash
 | |
| 
 | |
| # chkconfig: 2345 80 05
 | |
| # description: Grafana web server & backend
 | |
| # processname: grafana
 | |
| # config: /etc/grafana/grafana.ini
 | |
| # pidfile: /var/run/grafana.pid
 | |
| 
 | |
| ### BEGIN INIT INFO
 | |
| # Provides:          grafana
 | |
| # Required-Start:    $all
 | |
| # Required-Stop:     $remote_fs $syslog
 | |
| # Default-Start:     2 3 4 5
 | |
| # Default-Stop:      0 1 6
 | |
| # Short-Description: Start grafana at boot time
 | |
| ### END INIT INFO
 | |
| 
 | |
| #  tested on
 | |
| #  1. New lsb that define start-stop-daemon
 | |
| #  3. Centos with initscripts package installed
 | |
| 
 | |
| if [ -r /lib/lsb/init-functions ]; then
 | |
|     source /lib/lsb/init-functions
 | |
| fi
 | |
| 
 | |
| DAEMON_NAME="grafana"
 | |
| DAEMON_USER="grafana"
 | |
| DAEMON_PATH="/opt/grafana/current/grafana"
 | |
| DAEMON_OPTS="--config=/etc/grafana/grafana.ini web"
 | |
| DAEMON_PWD="/opt/grafana/current"
 | |
| DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
 | |
| DAEMON_NICE=0
 | |
| DAEMON_LOG='/var/log/grafana/grafana.log'
 | |
| 
 | |
| # If the daemon is not there, then exit.
 | |
| [ -x $DAEMON_PATH ] || exit 5
 | |
| 
 | |
| if [ "x$STDOUT" == "x" ]; then
 | |
|     STDOUT=/tmp/grafana.log
 | |
| fi
 | |
| 
 | |
| function pidofproc() {
 | |
|     if [ $# -ne 3 ]; then
 | |
|         echo "Expected three arguments, e.g. $0 -p pidfile daemon-name"
 | |
|     fi
 | |
| 
 | |
|     pid=`pgrep -f $3`
 | |
|     local pidfile=`cat $2`
 | |
| 
 | |
|     if [ "x$pidfile" == "x" ]; then
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     if [ "x$pid" != "x" -a "$pidfile" == "$pid" ]; then
 | |
|         return 0
 | |
|     fi
 | |
| 
 | |
|     return 1
 | |
| }
 | |
| 
 | |
| function killproc() {
 | |
|     if [ $# -ne 3 ]; then
 | |
|         echo "Expected three arguments, e.g. $0 -p pidfile signal"
 | |
|     fi
 | |
| 
 | |
|     pid=`cat $2`
 | |
| 
 | |
|     kill -s $3 $pid
 | |
| }
 | |
| 
 | |
| function log_failure_msg() {
 | |
|     echo "$@" "[ FAILED ]"
 | |
| }
 | |
| 
 | |
| function log_success_msg() {
 | |
|     echo "$@" "[ OK ]"
 | |
| }
 | |
| 
 | |
| do_start() {
 | |
|   cd $DAEMON_PWD
 | |
| 
 | |
|   # Checked the PID file exists and check the actual status of process
 | |
|   if [ -e $DAEMON_PID ]; then
 | |
|     pidofproc -p $DAEMON_PID $DAEMON_PATH > /dev/null 2>&1 && status="0" || status="$?"
 | |
|     # If the status is SUCCESS then don't need to start again.
 | |
|     if [ "x$status" = "x0" ]; then
 | |
|       log_failure_msg "$DAEMON_NAME process is running"
 | |
|       exit 1 # Exit
 | |
|     fi
 | |
|   fi
 | |
|   # Start the daemon.
 | |
|   log_success_msg "Starting the process" "$DAEMON_NAME"
 | |
| 
 | |
|   # Start the daemon with the help of start-stop-daemon
 | |
|   # Log the message appropriately
 | |
|   if which start-stop-daemon > /dev/null 2>&1; then
 | |
|     start-stop-daemon \
 | |
|       --start --quiet --oknodo --background \
 | |
|       --nicelevel $DAEMON_NICE \
 | |
|       --chdir "${DAEMON_PWD}" \
 | |
|       --pidfile "${DAEMON_PID}" --make-pidfile \
 | |
|       --chuid "${DAEMON_USER}" \
 | |
|       --exec  "${DAEMON_PATH}" -- $DAEMON_OPTS
 | |
|     result=$?
 | |
|   else
 | |
|     touch ${DAEMON_PID}
 | |
|     chown $DAEMON_USER "${DAEMON_PID}"
 | |
|     #daemon --user $DAEMON_USER --pidfile $DAEMON_PID nohup $DAEMON_PATH $DAEMON_OPTS
 | |
|     su -s /bin/sh -c "nohup ${DAEMON_PATH} --pidfile=${DAEMON_PID} ${DAEMON_OPTS} >> $STDOUT 3>&1 &" $DAEMON_USER
 | |
|   fi
 | |
| 
 | |
|   log_success_msg "$DAEMON_NAME process was started"
 | |
| }
 | |
| 
 | |
| do_stop() {
 | |
|   local result
 | |
| 
 | |
|   pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
 | |
|   if [ $? -ne 0 ]; then
 | |
|     log_failure_msg "${DAEMON_NAME} is not started"
 | |
|     result=0
 | |
|   else
 | |
|     log_success_msg "Stopping ${DAEMON_NAME}"
 | |
|     killproc -p "${DAEMON_PID}" SIGTERM
 | |
|     result=$?
 | |
|     if [ $result = 0 ]; then
 | |
|       log_success_msg "Stopped ${DAEMON_NAME}"
 | |
|       rm "${DAEMON_PID}"
 | |
|     fi
 | |
|   fi
 | |
| 
 | |
|   return $result
 | |
| }
 | |
| 
 | |
| do_restart() {
 | |
|   local result
 | |
|   do_stop
 | |
|   result=$?
 | |
|   sleep 2
 | |
|   if [ $result = 0 ]; then
 | |
|     do_start
 | |
|     result=$?
 | |
|   fi
 | |
|   return $result
 | |
| }
 | |
| 
 | |
| do_status() {
 | |
|   if [ -e $DEAMON_PID ]; then
 | |
|     pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
 | |
|     if [ $? -ne 0 ]; then
 | |
|       log_failure_msg "$DAEMON_NAME Process is not running"
 | |
|       exit 1
 | |
|     else
 | |
|       log_success_msg "$DAEMON_NAME Process is running"
 | |
|       exit 0
 | |
|     fi
 | |
|   else
 | |
|     log_failure_msg "$DAEMON_NAME Process is not running"
 | |
|     exit 3
 | |
|   fi
 | |
| }
 | |
| 
 | |
| do_usage() {
 | |
|   echo $"Usage: $0 {start | stop | restart | status}"
 | |
|   exit 1
 | |
| }
 | |
| 
 | |
| case "$1" in
 | |
|   start)   do_start;   exit $? ;;
 | |
|   stop)    do_stop;    exit $? ;;
 | |
|   restart) do_restart; exit $? ;;
 | |
|   status)  do_status;  exit $? ;;
 | |
|   *)       do_usage;   exit  1 ;;
 | |
| esac
 |