如果 python 脚本结束,最好的重启方式是什么? (Ubuntu 18.04)
Best way to restart python script if it ends? (Ubuntu 18.04)
我有几个用 Python 编写的 Discord 机器人,它们会在几个小时后出于某种原因停止。我想要一种方法来监视它们并在它们出现故障时重新启动它们。我已经在寻找一些解决方案,包括 bash 脚本、crontab 和 systemd,但其中 none 似乎对我有用。
即使是一个简单的 while true bash 脚本,它也会因为某些原因而崩溃。 crontab 不会 运行 因为我认为是环境问题,显然 systemd 仅用于服务?
所有 python 脚本都位于
/home/username/folder/script.py
我还希望能够轻松地暂停重新启动脚本的服务,因为偶尔我必须使用 git.
更新代码
monit 将满足您的需要,您可以将其配置为监视您的 python 脚本并在失败时重新启动它们。
配置起来有点快
我想出了如何用 systemd 解决我的问题。
首先导航到:
/etc/systemd/system
然后以 root 身份创建一个新服务:
sudo nano example.service
像这样制作您的服务文件:
[Unit]
Description=Restarts example.py if it closes
[Service]
User=your username
WorkingDirectory=/directory/of/script
ExecStart=/usr/bin/python3 /directory/of/script/example.py
Restart=always
[Install]
WantedBy=multi-user.target
然后输入这个让 systemd 重新加载服务文件。
sudo systemctl daemon-reload
然后你就可以开始你的服务了:
sudo systemctl start example.service
最后,检查您的服务状态:
sudo systemctl status example.service
我有几个用 Python 编写的 Discord 机器人,它们会在几个小时后出于某种原因停止。我想要一种方法来监视它们并在它们出现故障时重新启动它们。我已经在寻找一些解决方案,包括 bash 脚本、crontab 和 systemd,但其中 none 似乎对我有用。
即使是一个简单的 while true bash 脚本,它也会因为某些原因而崩溃。 crontab 不会 运行 因为我认为是环境问题,显然 systemd 仅用于服务?
所有 python 脚本都位于 /home/username/folder/script.py
我还希望能够轻松地暂停重新启动脚本的服务,因为偶尔我必须使用 git.
更新代码monit 将满足您的需要,您可以将其配置为监视您的 python 脚本并在失败时重新启动它们。
配置起来有点快
我想出了如何用 systemd 解决我的问题。
首先导航到:
/etc/systemd/system
然后以 root 身份创建一个新服务:
sudo nano example.service
像这样制作您的服务文件:
[Unit]
Description=Restarts example.py if it closes
[Service]
User=your username
WorkingDirectory=/directory/of/script
ExecStart=/usr/bin/python3 /directory/of/script/example.py
Restart=always
[Install]
WantedBy=multi-user.target
然后输入这个让 systemd 重新加载服务文件。
sudo systemctl daemon-reload
然后你就可以开始你的服务了:
sudo systemctl start example.service
最后,检查您的服务状态:
sudo systemctl status example.service