Linux封装uwsgi服务【基于systemctl】

目录

一、问题来源

二、解决方案

三、补充资料

四、补充


一、问题来源

在使用uwsgi+nginx部署django项目时,通常使用下面的命令在对uwsgi进程进行管理

# 进入项目路径
cd /var/www/html/Podcaster

# 开启uwsgi服务
sudo uwsgi --ini uwsgi.ini

# 停止uwsgi服务
sudo uwsgi --stop uwsgi.pid

# 重启uwsgi服务
sudo uwsgi --reload uwsgi.pid

这就会导致一个问题,每次要管理项目时都需要进入项目目录下,而这个目录有点深,于是我就想把它封装为一个服务,类似于nginx的这种

sudo service nginx start
sudo service nginx stop
sudo service nginx reload

二、解决方案

我们可以使用systemctl通过服务的方式进行管理

操作图下

# 创建服务文件
 

sudo vim /etc/systemd/system/podcaster.service

# 在文件中写入如下内容

[Unit]
Description=Podcaster Service
After=network.target

[Service]
User=root
WorkingDirectory=/var/www/html/Podcaster
ExecStart=uwsgi --ini uwsgi.ini
ExecStop=uwsgi --stop uwsgi.pid
ExecReload=uwsgi --reload uwsgi.pid
Type=forking
Restart=always

[Install]
WantedBy=multi-user.target

参数解释

### 每个参数含义的解释
## Description:描述了该服务的名称或说明。在这个例子中,描述为"Podcaster Service",表示这是一 
   个用于Podcaster应用的服务。
## After:指定了该服务应该在哪个目标(target)之后启动。在这个例子中,指定 
   为"network.target",表示该服务应该在网络目标启动之后启动。


## User:指定了服务运行的用户。在这个例子中,指定为"root",表示该服务将以root用户身份运行。
## WorkingDirectory:指定了服务的工作目录。在这个例子中,指定为"/var/www/html/Podcaster",表    
   示该服务将在该目录下运行。
## ExecStart:指定了服务启动时要执行的命令
## ExecStop:指定了服务停止时要执行的命令
## ExecReload:指定了服务重新加载时要执行的命令
## Restart:指定了服务在发生故障或意外终止时的重启策略。在这个例子中,指定为"always",表示服务 
   将始终被重启。

## WantedBy:指定了该服务应该被安装到哪个目标(target)。在这个例子中,指定为"multi- 
   user.target",表示该服务将被安装到多用户目标

保存后,如果我们想要启用服务,可以这么操作

sudo systemctl enable podcaster

开启服务

sudo systemctl start podcaster

停止服务

sudo systemctl stop podcaster

重启服务

sudo systemctl reload podcaster

最后,我们可以通过下面的命令注销服务

sudo systemctl disable podcaster

三、补充资料

由于我这个涉及到了uwsgi的服务,这里写一下uwsgi的常用命令,留作学习笔记,防止忘记

查看当前的uwsgi进程信息

ps aux | grep uwsgi

查看某个uwsgi进程的详细信息

sudo cat /proc/<uwsgi.pid>/cmdline

停止每个pid的uwsgi进程

sudo kill <uwsgi.pid>

发送终止信号

sudo kill -SIGTERM 761525

如果uwsgi进程没有正常终止,你可以尝试使用强制终止信号SIGKILL。运行以下命令:

sudo kill -SIGKILL 761525

请注意,使用强制终止信号可能会导致进程无法进行清理操作,因此请谨慎使用。

一条龙服务

ps aux | grep uwsgi && sudo cat /proc/761525/cmdline && sudo kill 761525

四、补充

经过上面的systemctl服务配置后,仍然存在一个小小的问题,就是我是用 sudo systemctl stop podcaster 命令后台的那个uwsgi服务并没有真正的停止,这个问题我目前还没有解决,可能是受到了uwsgi --stop uwsgi.pid的影响,它并不能真正的停止uwsgi,我目前的解决方案是直接使用

sudo systemctl disable podcaster

来强制停止,随谈可以停止服务,但是那两个stop/reload的命令就失效了,我国各位看官大佬知道怎么解决,还请在评论区留言指导一下,谢谢!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是大佬zvj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值