0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

daemontoolsの設定を自動で設定するシェルスクリプト(備忘録)

Last updated at Posted at 2020-11-30

前提条件

  • daemontoolsが使えるようになっていること

以上(笑)

シェルスクリプト作成

以下のシェルスクリプトをPATHが通っているところに置いて、実行のパーミッションを付けます。
この記事では「daemonctl」という名前で作成したとして説明します。

daemonctl
#!/bin/sh

# Current working directory
CWD=`pwd -P`

SERVICE=`pwd | awk -F"/" '{print $NF}'`

# Options
OPT=$1
SCRIPT=$2

# Display help
if [ -z $OPT ]; then
  echo "Usage: "`echo $0 | awk -F"/" '{print $NF}'`" [option]"
  echo "  start: start service."
  echo "   stop: stop service."
  echo "restart: restart service."
  exit
fi

# When in stop mode, if there was no service directory.
if [ "$OPT" != "stop" ]; then
  if [ ! -f "$SCRIPT" ]; then
    START="$CWD/start.sh"
  else
    START=$SCRIPT
  fi

  if [ ! -f "$START" ]; then
    echo "require start.sh script."
    exit
  fi
fi

if [ ! -d "$CWD/service/$SERVICE" ]; then
  mkdir -p $CWD/service/$SERVICE
  cat << EOF > $CWD/service/$SERVICE/run
#!/bin/sh

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

cd $CWD
exec $START
EOF
  chmod 755 $CWD/service/$SERVICE/run
fi

#=============================================================================
# Start daemon
#=============================================================================
if [ "${OPT}" = "start" ]; then
  if [ ! -L /etc/service/$SERVICE ]; then
    ln -s $CWD/service/$SERVICE /etc/service/
  fi
        svc -u /etc/service/$SERVICE > /dev/null 2>&1
  echo "Start daemon service [$SERVICE]."

#=============================================================================
# Stop daemon
#=============================================================================
elif [ "${OPT}" = "stop" ] && [ -L /etc/service/$SERVICE ]; then
  svc -d /etc/service/$SERVICE > /dev/null 2>&1
  rm -rf /etc/service/$SERVICE
  PID=`ps ax | grep "supervise $SERVICE" | grep -v 'grep' | awk '{print$1}'`
        kill -9 $PID
  echo "Stop daemon service [$SERVICE]."

#=============================================================================
# Restart daemon
#=============================================================================
elif [ "${OPT}" = "restart" ]; then
  svc -d /etc/service/$SERVICE > /dev/null 2>&1 && svc -u /etc/service/$SERVICE > /dev/null 2>&1
  echo "Restart daemon service [$SERVICE]."
fi

パーミッションは、

$ chmod 755 daemonctl

みたいな感じで付けてください。

スクリプト解説

とりあえずはdaemontoolsで監視したいツールのディレクトリに入ります。
ディレクトリが無い場合は、適当な場所にディレクトリを作って入ります。
そこに「start.sh」という名前で、ツールの起動スクリプトを書きます。
exec」で起動するようにしないと上手くdaemontoolsで監視してくれないっぽい。

起動スクリプトが作成出来たら、以下のような感じで実行します。

$ daemonctl start

すると、カレントディレクトリにある「start.sh」を起動スクリプトとしてdaemontoolsがツールを起動し、プロセス監視を開始します。
実行すると「[カレントディレクトリ]/service/[カレントディレクトリ名]」というディレクトリが作成されているはず。
例)
カレントディレクトリが「minecraft」だった場合、「./service/minecraft」というディレクトリが作成されているはず。
これが、daemontoolsが監視するために使用するディレクトリ。
通常はエディタなどで中にある「run」というファイルを記述して「/etc/service」配下にシンボリックリンクを貼ったりしないといけなかったが、それをシェルスクリプトで実行するようにしてあります。
実行してエラーなどが出なかった場合に、

$ ps ax | grep minecraft

などとプロセスを確認してみると、superviseと、起動されたツールの2つが出てくると思います。
ここで、

$ daemonctl stop

と実行すると、ツールが停止し、daemontoolsの監視が止まります。
プロセスで確認すると、先程の2つのプロセスがなくなっているのが確認出来るはず。

$ daemonctl start [起動スクリプトのPATH]

とやると、「start.sh」以外の起動スクリプトを指定することも出来ます。

daemontoolsってなに?

という人はググってください。
Windows用のツールで同名の、光学メディアマウントツールがありますので、上手くググってください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?