#!/usr/bin/env bash # # emqx # # chkconfig: 2345 80 30 # description: EMQX, a distributed, massively scalable, highly extensible MQTT message broker written in Erlang/OTP # processname: beam # # Source function library. # shellcheck disable=SC1091 . /etc/rc.d/init.d/functions RETVAL=0 PATH=/sbin:/usr/sbin:/bin:/usr/bin NAME=emqx DAEMON=/usr/bin/$NAME lockfile=/var/lock/subsys/$NAME mkdir -p /var/run/$NAME pidfile=/var/run/$NAME/$NAME.pid # Check for script, config and data dirs [ -x /usr/bin/$NAME ] || exit 0 [ -d /etc/$NAME ] || exit 0 [ -d /var/lib/$NAME ] || exit 0 # Read configuration variable file if it is present and readable # shellcheck disable=SC1090 [ -r /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME # `service` strips all environmental VARS so # if no HOME was set in /etc/sysconfig/$NAME then set one here # to the data directory for erlexec's sake if [ -z "$HOME" ]; then export HOME= fi status -p $pidfile -l "$(basename $lockfile)" $NAME >/dev/null 2>&1 running=$? find_pid() { # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions ps ax | grep -E "\-progname\s+$NAME\s" | awk '{print $1}' } check_pid_status() { local pid pid="$(find_pid)" if [ "$pid" = "" ]; then # prog not running? return 1 else # running return 0 fi } start() { # Start daemons. echo -n $"Starting emqx: " $DAEMON start RETVAL=$? if [ $RETVAL -eq 0 ]; then touch $lockfile find_pid > $pidfile success else failure $"$NAME start" fi echo return $RETVAL } stop() { # Stop daemon. echo -n $"Shutting down emqx: " $DAEMON stop 2>/dev/null for _ in $(seq 1 10); do sleep 1 check_pid_status RETVAL=$? if [ $RETVAL -eq 1 ]; then break fi done if [ $RETVAL -eq 1 ]; then rm -f $lockfile $pidfile success echo && return 0 else failure $"$NAME stop" echo && return 1 fi } hardstop() { echo -n $"Shutting down $NAME: " su - emqx -c "ps -ef | grep -E '\-progname\s+$NAME\s' | awk '{print \$2}' | xargs kill -9" for _ in $(seq 1 10); do sleep 1 check_pid_status RETVAL=$? if [ $RETVAL -eq 1 ]; then break fi done if [ $RETVAL -eq 1 ]; then rm -f $lockfile $pidfile success echo && return 0 else failure $"$NAME hardstop" echo && return 1 fi } # See how we were called. case "$1" in start) [ $running -eq 0 ] && exit 0 start ;; stop) stop ;; restart|force-reload) [ $running -eq 0 ] && stop start ;; hardstop) [ $running -eq 0 ] || exit 0 hardstop ;; condrestart|try-restart) [ $running -eq 0 ] || exit 0 restart ;; status) status -p $pidfile -l "$(basename $lockfile)" $NAME ;; ping) $DAEMON ping || exit $? ;; *) echo $"Usage: $0 {start|stop|restart|force-reload|hardstop|condrestart|try-restart|status|ping}" exit 1 esac exit $?