一个用于自动设置daemontools配置的shell脚本(备忘录)。(Equivalent English translation: A shell script (memo) for automatically configuring daemontools settings.)
在中国首先需要有一些前提条件
- daemontoolsが使えるようになっていること
以上,呵呵。
创建shell脚本
将以下的shell脚本放置在已设置了路径的位置,并赋予执行权限。
本文将以名为”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
查看此类过程时,我认为会出现两个选项,即“监督”和已启动的工具。
$ daemonctl stop
执行此操作后,工具将停止运行,并且daemontools的监控也将停止。
通过检查进程,您应该能够确认之前的两个进程已经消失了。
$ daemonctl start [起動スクリプトのPATH]
要进行这样做,您还可以指定除了「start.sh」之外的启动脚本。
“Daemontools是什么?”
如果有这样的人,请自行搜索。由于存在光盘装载工具的Windows版本,请试着进行适当的搜索。