我的服务器上有一个 discord 机器人。我想在 systemd 中创建一个服务,而不是使用 shell 手动启动。我希望机器人在发生故障或停止时重新启动。所以我输入了Restart=always
我的服务文件。当告诉机器人停止时,它会重新启动而不会出现任何问题。但运行 3 小时 51 分钟后,服务无缘无故停止,我不知道原因。
该机器人是一个 python 模块,我有一个start_bot.py
启动该机器人的 python 脚本。
以下是 journalctl 的输出:
Apr 14 20:49:56 sapinet927 systemd[23065]: Stopping Service du bot du lg de la rez...
Apr 14 20:49:56 sapinet927 python[8408]: Disconnected.
Apr 14 20:49:56 sapinet927 systemd[23065]: lgrez.service: Succeeded.
Apr 14 20:49:56 sapinet927 systemd[23065]: Stopped Service du bot du lg de la rez.
它说机器人停止了,但我不明白为什么。
以下是服务状态:
lgrez.service - Service du bot du lg de la rez
Loaded: loaded (/home/lgrez/.config/systemd/user/lgrez.service; enabled; vendor preset: enabled)
Active: inactive (dead)
这是我的服务文件~/.config/systemd/user/lgrez.service
:
[Unit]
Description=Service du bot du lg de la rez
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
WorkingDirectory=/home/lgrez
ExecStart=/home/lgrez/env/bin/python -u start_bot.py .env
Restart=always
RestartSec=1
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target
我的服务文件有问题吗?
我用 启用了它systemctl --user enable lgrez
。
答案1
问题是,当用户注销时,systemd 会终止所有用户服务,如下所示:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=825394
为了绕过这个问题我使用了:
loginctl enable-linger lgrez
并KillUserProcesses=no
放入/etc/systemd/logind.conf
。
现在它运行良好。