本記事はPythonで作成したSlackbotのプロセスを永続化する方法について説明するものです。
Slackbotを通常の起動方法でする場合、以下のコマンドをターミナルから実行しますが、ターミナルを閉じた場合はSlackbotのプロセスも終了してしまいます。
自分のPCでだけ使用する場合は大きな問題となりませんが、サーバー上で永続的に起動しておきたい場合には不便です。
ターミナルを閉じた後も動作させるためには、foreverコマンドなどを活用してプロセスを永続化する必要があります。
今回は、foreverコマンドを使ってbotのプロセスを永続化する方法について紹介します。
PythonによるSlackbot作成については「SlackbotをPythonで作成しよう」をお読みください。
目次
foreverコマンドを使用してSlackbotのプロセスを永続化する
プロセスを永続化する方法の1つにnode.jsでインストールできる「forever」コマンドがあります。
foreverコマンドはnode.js用のコマンドですが、オプションを指定すればpythonも永続的なプロセスとして起動可能です。
foreverコマンドのインストール方法
npmコマンドでインストールします。
foreverコマンドの実行方法
foreverコマンドは以下のように実行します。
pythonコマンドを実行する場合は「-c」オプションを指定します。
foreverは「forever list」と打ち込みます
data: [0] abc0 python bot.py 12345 12345 /Users/super/.forever/abc0.log 0:0:0:36.361
foreverプロセスは起動した順にプロセス番号が0から割り振られます。
data: [1] def1 python3 bot.py
data: [2] ghi2 python3 bot.py
0を削除した場合は、0が欠番になるのではなく、1が0に、2が1と上にずれるので注意が必要です。
data: [1] ghi2 python3 bot.py xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Slackbotの起動をシェルスクリプト化する
foreverコマンドの操作はスクリプト化しておくと便利です。
◆起動(bot_start.sh)
forever start -c python3 bot.py
◆停止(bot_stop.sh)
forever stop 0
◆再起動(bot_restart.sh)
両方呼ぶことで再起動できます。
./bot_stop.sh
./bot_start.sh
Slackからシェルスクリプトを操作してBotを再起動する
Botのコードを修正した場合、反映させるためにはBotを一度停止して再起動する必要があります。
SlackからBotを起動は不可
SlackにログインしていないBotに対して指示はできません。よってBotに対してSlackから起動を指示することもできません。
SlackからBotを停止する
SlackからBotを停止することは可能です。
しかし、停止後はSlackからログアウトしてしまいます。
前述の通りBotはSlackから起動する方法がないため、起動するためにはサーバーにログインして直接スクリプトを実行する必要があります。
Slackから再起動する
停止と起動を同時に行える再起動スクリプトがSlackから起動できれば、Slackからコードを反映しつつ、サーバーにログインせずにコードの修正を反映できます。
シェルスクリプトを操作して起動・停止・再起動する方法
Pythonでシェルスクリプトを操作するためには「os」というライブラリを使用します。
「os.system」でシェルコマンドを実行できます。
os.system('[シェルコマンド]')
以下のコードをbotmodules.py加えておきます。
1 2 3 4 | @respond_to('^再起動$') def reboot_bot(message): message.send('再起動します') os.system('./bot_restart.sh') |
これでOKかと思ったら?
・
・
・
Botが起動できませんでした。
途中でプロセスが切れるとスクリプトも落ちてしまう模様です。
ちなみにnode.jsでSlackbotを作成した場合は上記でもうまくいきます。
ということで、新しいプロセスを起動するまで古いプロセスを残しておく必要があります。
先に新しいプロセスを立ててその後でプロセスを終了させることで更新を反映したBotのみを起動できます。
「./bot_start.sh」と「./bot_stop.sh」の順番を入れ替えます。
◆再起動スクリプトの修正(bot_restart.sh)
./bot_start.sh
./bot_stop.sh
以上、Slackbotのプロセスを永続化する方法とSlackからのスクリプト制御方法でした。
Slackbot+PythonまとめTOP>>Slackbotの作り方マニュアル〜Python編〜