start-stop-daemon
init.d

Debianのstart-stop-daemonをCentOSでも使いたい

More than 1 year has passed since last update.

Debianのinit.dスクリプトによく使われている、start-stop-daemonをCentOSで使いたい、
というのも、javaで作られたアプリのサーバー化をしていた際に、debianだと、start-stop-daemonで簡単に制御出来ていたのに…
ということがあって試してみた次第

apps-sys-utilsに含まれているので、まずソースを拾ってくる

cd /usr/local/src
wget http://developer.axis.com/download/distribution/apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz

展開すると、Makefileがあるので、makeしたくなるが、ぐっとこらえてgccでコンパイルする
※makeで実行するといろいろ問題が出るので、使わないのが吉

tar zxvf apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
cd apps/sys-utils/start-stop-daemon-IR1_9_18-2/
gcc start-stop-daemon.c -o start-stop-daemon
cp start-stop-daemon /usr/bin/

単独のバイナリができるので、ユーザレベルで実行出来る場所(/usr/bin/等)にコピーする
使用例として、selenium-serverの起動スクリプトを例にすると、
centos上で以下のように記述してデーモン化することが容易になる

/etc/init.d/selenium-server
#!/bin/bash

# chkconfig: 235 99 10
# description: Start or stop the selenium server
#
### BEGIN INIT INFO
# Provides: selenium
# Required-Start: $network $syslog $xvfb
# Required-Stop: $network
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Description: Start or stop the selenium server
### END INIT INFO


DESC="Selenium server"
RUN_AS=root
JAVA_BIN=/usr/bin/java

SELENIUM_DIR=/etc/selenium
PID_FILE="$SELENIUM_DIR/selenium.pid"
JAR_FILE="$SELENIUM_DIR/selenium-server-standalone-3.4.0.jar"
LOG_FILE="$SELENIUM_DIR/selenium.log"

MAX_MEMORY="-Xmx512m"
STACK_SIZE="-Xss1024k"

DAEMON_OPTS=" -client $MAX_MEMORY $STACK_SIZE -jar $JAR_FILE -log $LOG_FILE -Dwebdriver.gecko.driver=/usr/bin/geckodriver"

NAME=selenium

# TODO: Put together /etc/init.d/xvfb
export DISPLAY=:99.0

case "$1" in
    start)
        echo -n "Starting $DESC: "
        start-stop-daemon -c $RUN_AS --start --background --pidfile $PID_FILE --make-pidfile --exec $JAVA_BIN -- $DAEMON_OPTS
        echo "$NAME."
        ;;

    stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --pidfile $PID_FILE
        echo "$NAME."
        ;;

    restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --pidfile $PID_FILE
        sleep 1
        start-stop-daemon -c $RUN_AS --start --background --pidfile $PID_FILE  --make-pidfile --exec $JAVA_BIN -- $DAEMON_OPTS
        echo "$NAME."
        ;;

    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

以外に便利なので、入れておくといいかもしれない。