服务器开机运行服务

将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服务时出错,单次运行时能正常运行

暂未研究透彻该方法

  1. 创建一个自启动的脚本

    vi /etc/scripts/mytest.sh
    #!/bin/bash
    #开机创建一个文件夹
    mkdir /etc/scripts/ccc  
  2. 给予执行权限

    chmod 777 mytest.sh
  3. /etc/rc.d/rc.local文件中添加脚本的绝对路径
  4. 给与rc.local执行权限

    chmod 777 rc.local

systemd(system daemon)

systemd的工具

  • systemctl:用作内省和控制systemd系统和服务管理器的状态。
  • system-cgls:以树形递归显示选中的Linux控制组织结构层次。
  • systemamd:一个systemd系统和服务管理器的图形化前端。

systemctl 命令

该命令可以查看系统状态和管理系统及服务。

  1. 查看系统systemd的service整体情况

    systemctl list-units --type service
  2. 控制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查看效果

.service文件的内容格式

Last modification:June 25, 2024
If you think my article is useful to you, please feel free to appreciate