とあるゲームのボス討伐時間と次の出現時間をdiscordのチャンネル上で管理するBOTを作成してみた。
使用言語は、Python
データ管理はPandasのデータフレームで検索や結合処理もできるので、データベースまでは必要ないかなとおもったので一旦CSVファイルを活用。
サービス登録する際に躓いた点
1.systemctlへの登録方法
aptなどでインストールしたサービスの起動、停止などの方法は理解していたが、自分で作ったスクリプトを登録する方法などは今回始めて知った。
systemctlに設定するファイルを作成
$ sudo vi /etc/systemd/system/hogehoge.service
[Unit]
Description = *****
[Service]
ExecStart = path_to_file
ExecStop=/bin/kill ${MAINPID}
Type = simple
Environment=PYTHONPATH= pythonライブラリへのPATH
User= 実行ユーザ名
[Install]
WantedBy = multi-user.target
パラメータ | 値 |
---|---|
ExecStart | 実行するファイルへのフルパス。ファイルには実行権限を付与 |
ExecStop | stop時のコマンド |
Environment | Pythonライブラリへのパス。pip show discordなどしてパッケージのlocationを記述 |
サービスとして認識されているか確認する。
$ sudo systemctl list-unit-files --type=service
サービスを有効化して、起動する。
$ sudo systemctl enable サービス名
$ sudo systemctl start サービス名
2.サービス登録するとrootユーザでの実行環境になるため、システムデフォルトのpythonへのパスでうごいてしまうので、pyenvで用意したpythonのユーザ実行環境がそのまま使えないので、rootユーザ起動時の環境変数の読み込み、特にPATHの書き換えて実行する必要がある。
$ sudo visudo
以下を追加して、ログインユーザの環境変数を追加
Defaults env_keep += "PATH" # 追加
Defaults env_keep += "PYENV_ROOT" # 追加
参考(そのままかも)