通过systemd实现linux后台自启动web服务
Opened this issue · 0 comments
MobiusT commented
个人用途
配合nonebot-plugin-memes-api插件实现多环境(bot)共用同一个meme-generator,省去重复维护工作
准备工作
以下是我的环境
- 操作系统 CentOS7.9 (其他系统应该也行)
- systemd, 检查命令:
whereis systemd
meme-generator, 检查命令:
meme -h
- meme-generator, 为了及时更新表情,改用git clone安装meme-generator,安装命令:
cd /app/mobius/webapps # 以此地址为例,可以自行更改
git clone https://github.com/MeetWq/meme-generator
- root权限
操作步骤
- 配置meme-generator,将web监听地址变更为0.0.0.0,可通过局域网内访问交互式 API 文档(访问 http://ip:port/docs )检查
[server]
host = "0.0.0.0" # web server 监听地址
port = 2233 # web server 端口
确认meme命令绝对路径,
which meme # ~/.local/bin/meme 为例 ,熟悉linux的朋友此时应该已经知道绝对路径了
cd ~/.local/bin/
pwd # /app/mobius/.local/bin 为下文示例
- python命令绝对路径,
python -V # 检查版本,旧版本linux不要使用到python2.7去了
which python # /usr/bin/python3 # 为下文示例
- root权限新建service文件,非root用户自行添加sudo
[Unit]
Description=meme Service
After=network.target
[Service]
User=mobius
Group=root
Type=simple
ExecStart=/usr/bin/python3 -m meme_generator.app
WorkingDirectory=/app/mobius/webapps/meme-generator
Restart=on-failure
[Install]
WantedBy=multi-user.target
以下为旧版
ExecStart=/app/mobius/.local/bin/meme start
WorkingDirectory=/
- Description 服务的描述
- After 在network服务之后启动服务
- User&Group 启动服务使用的用户和组,可不用
- Type=simple,默认值,执行ExecStart指定的命令,启动主进程
- ExecStart 启动当前服务的命令,务必使用第二点中获取到的绝对路径
- WorkingDirectory 工作路径,使用准备工作中git clone 的位置
- Restart=on-failure 定义何种情况 Systemd 会自动重启当前服务
- WantedBy,值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名+.wants后缀构成的子目录中
vi /usr/lib/systemd/system/meme.service # 将上文内容写入到此文件中,:wq保存
systemctl enable meme.service # 开机启动
systemctl start meme.service # 启动服务
systemctl stop meme.service # 停止服务
tail -100f /var/log/messages|grep meme # 查看日志
更新表情
- 更新meme-generator:
cd /app/mobius/webapps/meme-generator # 以此地址为例,应使用clone位置
git pull
- 重启meme:
systemctl restart meme.service # 重启服务
- 使用api的更新表情命令
其他
本issue为个人学习探索的总结记录,如有错误欢迎各位大佬指正