基于 .env 下的 Flask + gunicorn + systemctl 服务部署配置如下
1、创建 Flask 服务管理脚本. 具体示例如下,
# 打开服务目录 $ cd /etc/systemd/system/ # 后缀名必须 .service $ vim application-alias.service # 复制如下代码到 application-alias.service 到改文件保存且退出(:wq)
[Unit] Description=gunicorn daemon After=network.target [Service] WorkingDirectory=/applicaton-path/ EnvironmentFile=/applicaton-path/.env ExecStart=/applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error-logfile /var/log/application-alias/error.log --bind 127.0.0.1:8000 run:app --access-logfile /var/log/application-alias/access.log --worker-connections 1500 --backlog 2048 --timeout 30 --graceful-timeout 30 --keep-alive 3 ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
2、启动 application-alias 项目服务
1)、重新加载所有服务配置,如下命令:
# 只要有.service 服务配置更新, 必须执行改命令才会生效 $ systemctl daemon-reload # 如果执行 systemctl daemon-reload 此命令,直接 sudo systemctl start application-alias.service 会报如下错误 # Warning: The unit file, source configuration file or drop-ins of gunicorn.service changed on disk. Run 'systemctl daemon-reload' to reload units.
2)、启动服务、赞同服务、重启服务、查看服务运行状态
# 服务状态或者查看日志等
$ sudo systemctl status application-alias.service
# 输出内容开始
gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/application-alias.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-09-26 17:20:51 CST; 12min ago
Main PID: 21784 (gunicorn)
Tasks: 8 (limit: 4915)
CGroup: /system.slice/gunicorn.service
├─21784 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21812 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21813 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21814 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21815 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21817 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
├─21818 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
└─21819 /applicaton-path/venv/bin/python3 /applicaton-path/venv/bin/gunicorn --worker-class=gevent --workers 7 --error
# 输出内容结束
# 暂停服务
$ sudo systemctl stop application-alias.service
# 启动服务
$ sudo systemctl start application-alias.service
# 重启服务
$ sudo systemctl restart application-alias.service
3、Systemctl 可以管理其他Java、php 等服务,只要时有服务进程管理都可以用改Systemctl 管理
1)启动Java 服务脚本例如下
[Unit] Description=foundation After=syslog.target [Service] # 当前用户 User=root ExecStart=/usr/bin/java -jar /application-alias.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target
What is Systemctl? An In-Depth Overview



