服务器开机运行服务
将Flask后端项目搬到了Linux服务器(CentOS),与原来在Windows上运行存在差异,一开始使用宝塔的插件直接通过python运行,但是发现无法在服务器重启后开机自动启动。
Linux系统的开机启动顺序:
–>加载BIOS
–>读取MBR
–>Boot Loader
–>加载内核
–>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)
–>init进程执行rc.syninit
–>启动内核模块
–>执行不同级别运行的脚本程序
–>执行/etc/rc.d/rc.local(本地运行服务)
–>执行/bin/login,就可以登录了
rc.local方式
执行python服务时出错,单次运行时能正常运行
暂未研究透彻该方法
创建一个自启动的脚本
vi /etc/scripts/mytest.sh
#!/bin/bash #开机创建一个文件夹 mkdir /etc/scripts/ccc
给予执行权限
chmod 777 mytest.sh
- 在
/etc/rc.d/rc.local
文件中添加脚本的绝对路径 给与
rc.local
执行权限chmod 777 rc.local
systemd(system daemon)
systemd的工具
- systemctl:用作内省和控制systemd系统和服务管理器的状态。
- system-cgls:以树形递归显示选中的Linux控制组织结构层次。
- systemamd:一个systemd系统和服务管理器的图形化前端。
systemctl 命令
该命令可以查看系统状态和管理系统及服务。
查看系统systemd的service整体情况
systemctl list-units --type service
控制systemd系统与服务管理器,用来对服务进行精细化控制/查询的命令
# 激活服务 systemctl start xxx.service # 停止服务 systemctl stop xxx.service # 重启服务 systemctl restart xxx.service # 查看服务状态 systemctl status xxx.service # 检查服务是否配置为自动启动 systemctl is-enabled xxx.service #将服务设置为自动启动 systemctl enable xxx.service # 将服务设置为取消自动启动 systemctl disable xxx.service
操作流程
新建service文件,并插入内容
Centos位于:/usr/lib/systemd/system/
Ubuntu位于:/etc/systemd/system/
cd /usr/lib/systemd/system/ # 切换到指定目录
vi myflask.service # 新建文件
myflask.service
文件插入内容
通过gunicorn
启动flask项目为例
[Unit]
Description=Gunicorn server for myflask
[Service]
Type=simple # 类型
Restart=on-failure #指明在进程崩溃时自动重启进程
#项目的工作目录,.py所在的目录
WorkingDirectory=/www/wwwroot/Flask
#要执行的进程
ExecStart=ExecStart=/root/miniconda3/envs/flask/bin/gunicorn --chdir /www/wwwroot/Flask -b 127.0.0.1:5001 run:app1
[Install]
#告诉systemd,在引导时启动这个服务
WantedBy=multi-user.target
将服务加入开机启动
systemctl enable myflask.service
systemctl start myflask.service
# reboot查看效果