以前の記事でdiscordのbotをLinux上で動かす方法を紹介しましたが、二重起動防止の部分の実装について、普通にもっといい方法があったので追記します。
①までは前回の記事と一緒です。今回は②から。
②cronを設定
不慮の事故でbotが落ちた時に、いちいち「nohup python3 discobot.py < /dev/null&」するのはクソめんどくさいので、落ちていたら自動で再起動させるという風にしたいと思います。
Linuxについている「cron」という機能を利用します。cronの使い方がそもそもわからない人はググってください。
cronに以下のように指定します。
* * * * * setlock -Xn discobot.lock python3 discobot.py
#(※discobot.lockとdiscobot.pyの場所はフルパスで書く)
setlockというのは、第1引数に指定したファイル (この場合ならdiscobot.lock) をロックして、その後の引数に書いたプロセスを起動するという意味です。つまり、discobot.lockがロックされている間は別のプロセスがdiscobot.lockをロックして起動することはできませんから、二重起動を防止してくれるわけです。
つまり、discobot.lockがロックされていなければbotを起動するという動作をcronに仕込んでおくのです。
これで1分ごとに落ちているかどうかを確認して、落ちていたら再起動するようになりました。
多分これでbotがだいぶ安定的に動作するようになったんじゃあないでしょうか。
以上、追記でした。
「【備忘録追記】Linux上でDiscordのbotをPythonで動かす・改」への1件のフィードバック