Python&运维系列(亲测有效):ubuntu设置uwsgi和nginx开机自启(在虚拟环境下启动)




一. nginx服务和uwsgi服务如何设置开机自启动

上次学到了在云服务器下如何部署Django项目,用到了nginx服务和uwsgi服务,需要手工启动这2个服务的命令。

现在考虑如何设置开机自启动,为什么要这样考虑?因为服务器万一出问题,意外重启了,那我们部署的Django项目不就挂了吗?到时候还是要人工去启动吗?

所以最好还是配置开机自启动以防万一。

网上查了很多开机自启动配置,最后选择:修改系统文件 /etc/rc.d/rc.local ,添加启动命令脚本。

测试过程中,发现nginx服务自启动比较容易,直接添加就行。但是发现 uwsgi 服务,配置该服务开机自启几种方式,reboot后,导致云服务器挂掉,无法再登录,只能通过云服务官网重启才能进入,所以谨慎操作!!!

经过多次测试和网上经验总结,确定了一个可行方案:

  1. /etc/init.d/ 路径下面,建立 uwsgi.sh 启动命令脚本,注意“一定要放到 /etc/init.d/ 路径下面!!!”,其他路径容易导致云服务器挂掉,我试过多次了。

  2. vim /etc/init.d/uwsgi.sh

添加如下内容:注意“执行命令的文件一定要用绝对路径!!!”

#!/bin/bash
/usr/python3/bin/uwsgi --ini /home/django_pro/mysite/uwsgi.ini;

esc 退出编辑,:wq 保存修改

/etc/init.d/uwsgi.sh修改为可执行

chmod 777 /etc/init.d/uwsgi.sh
  1. 添加开机自启动脚本 到 /etc/rc.d/rc.local 上。
vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
#开机自启动 nginx 服务
/usr/sbin/nginx
#开机自启动 uwsgi 服务,一定要用绝对路径执行该sh
/etc/init.d/uwsgi.sh

esc 退出编辑,:wq 保存修改

rc.local修改为可执行

chmod 777 /etc/rc.d/rc.local
  1. reboot 重启检验结果
[root@~]# ps -ef|grep uwsgi
root      1056     1  0 16:23 ?        00:00:00 /usr/python3/bin/uwsgi --ini /home/django_pro/mysite/uwsgi.ini
root      1408  1056  0 16:23 ?        00:00:00 /usr/python3/bin/uwsgi --ini /home/django_pro/mysite/uwsgi.ini
root      1572  1473  0 16:48 pts/0    00:00:00 grep --color=auto uwsgi
[root@~]# ps -ef|grep nginx
root      1017     1  0 16:23 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx     1023  1017  0 16:23 ?        00:00:00 nginx: worker process
root      1574  1473  0 16:49 pts/0    00:00:00 grep --color=auto nginx

二. ubuntu设置uwsgi和nginx开机自启(在虚拟环境下启动)

一、配置nginx开机自启动

1,在/usr/lib/systemd/system目录下新建nginx.service文件,内容如下
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target

脚本解释:

Unit:服务的启动顺序和依赖关系

Description:对该服务的描述;

After:在b.target服务组启动后,再启动本服务;

Service:服务具体执行的方式

ExecStart,ExecStop,ExecReload等:启动命令组,分别是服务启动时,停止时,重启时,启动前,启动后,停止后执行的命令;

Type:服务启动类型。默认simple表示ExecStart为主进程,notify类似于simple,启动结束后会发出通知信号。另外还有forking,oneshot,dbus,idle等类型;

Install:把服务放在哪个服务组

WantedBy:服务所在的服务组。

更多请参考 systemd的.service服务文件配置

2,设置开机自启动并启动nginx

设置开机自启动

systemctl enable nginx.service

查看是否正确启动

systemctl list-unit-files |grep nginx

看下如下图就成功启动了

在这里插入图片描述

启动nginx:

systemctl start nginx.service

其他常用命令

开启开机自启动:

systemctl enable nginx.service

停止开机自启动 :

systemctl disable nginx.service

启动 nginx 服务 :

systemctl start nginx.service

停止 nginx 服务 :

systemctl stop nginx.service

重启 nginx 服务 :

systemctl restart nginx.service

查看服务当前状态 :

systemctl status nginx.service

查看所有已启动的服务 :

systemctl list-units --type=service

二、设置uwsgi开机自启

1,在/usr/lib/systemd/system目录下新建uwsgi.service文件,内容如下
[Unit]
Description=uwsgi - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/home/zhang/QuBian/start_uwsgi.sh
ExecStop=/home/zhang/QuBian/stop_uwsgi.sh
[Install]
WantedBy=multi-user.target

ExecStartExecStop指定了两个.sh文件,用于配置uwsgi的启动和停止命令

2,在/home/zhang/QuBian目录下新建start_uwsgi.sh文件和stop_uwsgi.sh文件,内容分别如下:

start_uwsgi.sh文件

#!/bin/sh 
/root/.virtualenvs/qubian/bin/uwsgi --ini /home/zhang/QuBian/uwsgi.ini

stop_uwsgi.sh文件

#!/bin/sh 
/root/.virtualenvs/qubian/bin/uwsgi --stop /home/zhang/QuBian/uwsgi.pid
/root/.virtualenvs/qubian/bin/uwsgi是因为我这里有虚拟环境,需要使用到虚拟环境下的uwsgi命令,相当于先workon qubian进入到qubian虚拟环境再使用uwsgi --stop uwsgi.pid

如果你的uwsgi是在虚拟环境中使用pip来安装的,可以使用whereis uwsgi来查看uwsgi在虚拟环境下的目录
在这里插入图片描述
最后将这两个 .sh文件添加可执行权限 chmod a+x start_uwsgi.sh stop_uwsgi.sh

3,设置开机自启动并启动uwsgi

设置开机自启动

systemctl enable uwsgi.service

查看是否正确启动 systemctl list-unit-files |grep uwsgi 看下如下图就成功启动了

在这里插入图片描述

启动uwsgisystemctl start uwsgi.service

到这里就完成了,再次重启服务器时会自动启动运行nginxuwsgi了,妈妈再也不担心我要手动启动了~

参考文章

uwsgi开机自启

nginx开机自启







湿透剪自布

ubuntu设置uwsgi和nginx开机自启(在虚拟环境下启动)

PandaCode辉

nginx服务和uwsgi服务如何设置开机自启动

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以按照以下步骤配置Ubuntu上的NginxuWSGI开机启动: 1. 确保您已经安装了NginxuWSGI。如果尚未安装,请使用以下命令进行安装: ``` sudo apt update sudo apt install nginx uwsgi uwsgi-plugin-python3 ``` 2. 创建一个uWSGI的配置文件。可以使用任何文本编辑器创建一个名为`myapp.ini`的文件,并将以下内容添加到文件中(注意替换`/path/to/your/app`为您的应用程序路径): ``` [uwsgi] plugin = python3 socket = /tmp/myapp.sock chdir = /path/to/your/app wsgi-file = myapp.py processes = 4 threads = 2 master = true chmod-socket = 660 vacuum = true die-on-term = true ``` 3. 确保Nginx已经停止运行: ``` sudo systemctl stop nginx ``` 4. 创建一个Nginx的配置文件。可以使用任何文本编辑器创建一个名为`myapp.conf`的文件,并将以下内容添加到文件中(注意替换`/path/to/your/app`为您的应用程序路径): ``` server { listen 80; server_name example.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/myapp.sock; } } ``` 5. 将Nginx配置文件移动到Nginx的配置目录中: ``` sudo mv myapp.conf /etc/nginx/sites-available/ ``` 6. 创建一个符号链接以启用该配置文件: ``` sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/ ``` 7. 启动NginxuWSGI,并设置它们在开机时自动启动: ``` sudo systemctl start nginx sudo systemctl enable nginx sudo uwsgi --ini /path/to/your/app/myapp.ini sudo systemctl enable uwsgi ``` 现在,每当您的Ubuntu系统启动时,NginxuWSGI将自动启动,并且您的应用程序将可通过Nginx进行访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坦笑&&life

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

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

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

打赏作者

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

抵扣说明:

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

余额充值