標準出力にログを吐くアプリケーションのデーモンを start-stop-daemon で立てる

  • 15
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

GrowthForecast には残念ながらログファイルを書き出すオプションは無く,すべて標準出力に吐くようです

しかしそのようなアプリケーションでも start-stop-daemon を使って daemon 化してかつ標準出力に吐くログをログファイルとして保存したいことがあります

このような場合ただリダイレクトするだけではうまくいかないので以下のようにします

start-stop-daemon --start --background --exec "/bin/bash" --make-pidfile --pidfile "$PID" -- \
  -c "exec $DAEMON >> /var/tmp.log 2>&1"

まず bash の daemon として立ち上げますが,このままだと bash が daemon として起動してしまいます
そうなると pid が bash の daemon となり肝心の立ち上げたいプロセスの管理ができなくなってしまいます

そこで bash の exec を使います

これを使えば標準出力をログファイルに書き出せてかつ pid も管理したいプロセスのものになります

今回は GrowthForecast を実行する専用ユーザー gf を作成してそこで plenv を使って Perl と GrowthForecast をインストールしたので以下の様なスクリプトを用意しました

gf
#!/bin/bash

PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin

APP=growthforecast
ROOT_DIR="/home/gf"
DATA_DIR="${ROOT_DIR}/data"
PID="${ROOT_DIR}/gf.pid"
NAME=growthforecast
DAEMON="/home/gf/.plenv/shims/growthforecast.pl"
DAEMON_USER="gf"

. /lib/lsb/init-functions

case "$1" in
  start)
    echo "start $NAME";
    start-stop-daemon --start --chuid "$DAEMON_USER" --background --exec "/bin/bash" --make-pidfile --pidfile "$PID" -- \
      -c "exec $DAEMON --data-dir /home/gf/data --front-proxy=127.0.0.1 --enable-float-number >> /home/gf/log/gf.log 2>&1"
    ;;
  stop)
    log_daemon_msg "Stopping " "$NAME"
    start-stop-daemon --stop --oknodo --signal TERM --pidfile "$PID"
    log_end_msg $?
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: gf {start|stop|restart}"
    exit 1
    ;;
esac

exit 0