missing start-stop-deamon on centos 6.8

Mher Harutyunyan asked:

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.

[[email protected] init.d]$ service node_exporter start
Starting daemon: node_exporter.

but then nothing happen when I check the status:

[[email protected] 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”:

[[email protected] 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

My 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.


View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.