I am trying to run node_exporter for prometheus on centos 6.8. Here is the init.d script I was able to create:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Node exporter
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Node exporter for prometheus written in Go
### END INIT INFO
DAEMON=/home/prometheus/node_exporter-0.14.0.linux-amd64
NAME=node_exporter
USER=prometheus
PIDFILE=/var/run/prometheus/$NAME.pid
LOGFILE=/var/log/prometheus/$NAME.log
ARGS=""
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
do_start_prepare()
{
mkdir -p `dirname $PIDFILE` || true
mkdir -p `dirname $LOGFILE` || true
chown -R $USER: `dirname $LOGFILE`
chown -R $USER: `dirname $PIDFILE`
}
do_start_cmd()
{
do_start_prepare
echo -n "Starting daemon: "$NAME
start-stop-daemon --chuid $USER -C --background --start --quiet --pidfile $PIDFILE --make-pidfile --exec $DAEMON -- $ARGS >> $LOGFILE 2>&1
echo "."
}
do_stop_cmd()
{
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
rm $PIDFILE
echo "."
}
uninstall() {
echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] "
local SURE
read SURE
if [ "$SURE" = "yes" ]; then
stop
rm -f "$PIDFILE"
echo "Notice: log file was not removed: '$LOGFILE'" >&2
update-rc.d -f <NAME> remove
rm -fv "$0"
fi
}
status() {
printf "%-50s" "Checking $NAME..."
if [ -f $PIDFILE ]; then
PID=$(cat $PIDFILE)
if [ -z "$(ps axf | grep ${PID} | grep -v grep)" ]; then
printf "%s\n" "The process appears to be dead but pidfile still exists"
else
echo "Running, the PID is $PID"
fi
else
printf "%s\n" "Service not running"
fi
}
case "$1" in
start)
do_start_cmd
;;
stop)
do_stop_cmd
;;
status)
status
;;
uninstall)
uninstall
;;
restart)
stop
start
;;
*)
echo "Usage: $1 {start|stop|status|restart|uninstall}"
exit 1
esac
exit 0
and here is the output when I run it.
[prometheus@prometheus init.d]$ service node_exporter start
Starting daemon: node_exporter.
but then nothing happen when I check the status:
[prometheus@prometheus init.d]$ service node_exporter status
Checking node_exporter... Service not running
here is the log in /var/log/prometheus/node_exporter.log
/etc/init.d/node_exporter: line 35: start-stop-daemon: command not found
here is the output of "which":
[prometheus@prometheus prometheus]$ which start-stop-daemon
/usr/bin/which: no start-stop-daemon in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
I really need some guidance here since I mostly used CentOS 7 and not well familiar with init.d scripts
Best Answer
start-stop-daemon
is a Debian-specific script that exists only on Debian and systems derived from it, such as Ubuntu. You won't find it on CentOS, and indeed, it shouldn't be used as it isn't there.You can just start and stop the daemon directly.
In the case of
node_exporter
, the project ships an init script for CentOS 6 which you can use directly. You do not need to write your own.