XMPPボット-ボット起動・停止用シェルスクリプトの作成

Last-modified: 2014-08-16 (土) 12:41:50 (2237d)

[ 前のページ : XMPPボット-ステータス返答ボットの作成 | ]

作成したボットは、pythonプログラムのままでは少々扱いにくいため、常駐起動・停止用のシェルスクリプトを作成します。

このあたりは個人の嗜好が出る部分であり、やり方は十人十色だと思うのですが、僕なりの方法を記述します。

同ディレクトリにある xmpp-statbot.py を常駐させる場合です。

statbot-control.sh

#!/bin/bash

LANG=ja_JP.UTF-8
export LANG

LOGFILE=xmpp-statbot.log
PROGRAM=./xmpp-statbot.py

cd `dirname $0`

if [ -z "$1" ]; then
	echo "Usage: $0 < start | stop >"
	exit 3
fi

case "$1" in
"start")
	nohup ./loopexec.sh ${PROGRAM} >${LOGFILE} 2>&1 &
	echo "${PROGRAM} start."
	;;
"stop")
	PID=`pgrep -f "${PROGRAM}"`
	if [ "${PID}" ]; then
		echo "${PID}"
		kill ${PID}
		echo "Process killed."
	else
		echo "No process."
	fi
	;;

esac

loopexec.sh

#!/bin/bash

LANG=ja_JP.UTF-8
export LANG

if [ -z "$1" ]; then
	echo "Usage: $0 <command>"
	exit 3
fi

while : ; do
	$1
	sleep 3s
done

この2つのシェルスクリプトと xmpp-statbot.py を同一ディレクトリに置き、実行パーミッションを付与します。

statbot-control.sh start でボットが常駐し、標準出力ログが xmpp-statbot.log に保存されます。

もし、xmpp-statbot.pyが停止した場合は、3秒待機して再度ボットを起動させます。

ボットを終了させるには、statbot-control.sh stop で可能です。

ただ、この終了コマンドは pgrep の結果をkillするだけの荒っぽいものなので、環境によっては問題があるかもしれません。本来なら pid をファイルに記録するとか、ロックファイルを作るとかするべきなのでしょうが、私の環境ではこれで問題ありません。

実行結果

$ ls -l xmpp-statbot/
-rwxrwxr-- 1 yanagi yanagi  166 2008-12-31 14:58 config.py
-rwxrwxr-- 1 yanagi yanagi  136 2008-12-31 15:13 loopexec.sh
-rwxrwxr-- 1 yanagi yanagi  439 2008-12-31 15:08 statbot-control.sh
-rwxrwxr-- 1 yanagi yanagi 2340 2008-12-31 14:42 xmpp-statbot.py

$ xmpp-statbot/statbot-control.sh start
./xmpp-statbot.py start.

$ 

$ xmpp-statbot/statbot-control.sh stop
2458
2459
Process killed.

$