如何使用systemctl管理自定义Python服务(Flask应用)

诸神缄默不语-个人CSDN博文目录

在本教程中,我们将学习如何在 Linux 系统中创建并管理一个自定义 Python 服务。这里的例子将展示如何通过 systemd 的 systemctl 命令来启动、监控和管理一个基于 Flask 的 web 应用。通过这种方式,你可以确保你的应用作为一个服务在后台运行,并在系统启动时自动启动。

文章目录

  • 1. Flask示例网站
  • 2. 创建服务文件
  • 3. 启用并启动服务
  • 4. 检查服务状态
  • 5. 其他常用的systemctl命令
  • 结语

1. Flask示例网站

下面是一个简单的 Flask 应用的示例代码。这个示例网站将展示一个简单的欢迎页面,这可以用作你服务文件中 ExecStart 指向的应用。

首先,确保你已经安装了 Flask。如果还没有安装,你可以通过以下命令安装:

pip install flask

接下来,创建一个名为 app.py 的 Python 文件,并在文件中添加以下内容:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def home():return render_template('index.html')if __name__ == "__main__":app.run(host='0.0.0.0', port=5000)

这段代码定义了一个基本的 Flask 应用,其中有一个路由 / ,它会加载并返回一个名为 index.html 的 HTML 文件。

现在,你需要创建一个名为 templates 的文件夹,在这个文件夹中创建一个名为 index.html 的文件。将以下 HTML 代码放入 index.html 文件中:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Welcome to My App</title>
</head>
<body><h1>Welcome to My Flask App!</h1><p>This is a simple web page to demonstrate a basic Flask application.</p>
</body>
</html>

这个简单的 HTML 页面包含一个标题和一段描述文本。

最后,确保你的 Flask 应用设置正确,可以接受来自系统的请求。默认情况下,Flask 在开发模式下只监听来自本机的连接。上面的 app.run 方法中的 host='0.0.0.0' 配置允许服务器接受来自任何 IP 地址的连接,使其适合在生产环境中运行。

2. 创建服务文件

首先,我们需要在 /etc/systemd/system/ 目录下创建一个名为 myapp.service 的文件,该文件将定义我们的服务。以下是该服务文件的基本结构:

[Unit]
Description=Example Python Web Application Service
After=multi-user.target[Service]
User=appuser
WorkingDirectory=/path/to/your/application
ExecStart=/path/to/your/python/environment/bin/python /path/to/your/application/app.py[Install]
WantedBy=multi-user.target
  • Description:服务的描述。
  • After:指定服务启动的顺序。
  • User:指定运行服务的用户。
  • WorkingDirectory:应用的工作目录。
  • ExecStart:启动服务时执行的命令,这里指向你的应用的主 Python 文件。
  • WantedBy:定义在哪个目标下启动服务。

请确保将路径替换为你的实际路径和用户。

3. 启用并启动服务

服务文件创建并配置好后,你需要重新加载 systemd 配置,以便 systemd 能识别新的服务文件。运行以下命令:

sudo systemctl daemon-reload

然后,你可以启用服务,使其在系统启动时自动启动:

sudo systemctl enable myapp.service

现在,启动你的服务:

sudo systemctl start myapp.service

4. 检查服务状态

要查看服务的状态,确认它是否正确运行,你可以使用:

sudo systemctl status myapp.service

这个命令将提供服务的当前状态、启动日志等信息。

5. 其他常用的systemctl命令

以下是一些常用的 systemctl 命令,用于管理服务:

  • 停止服务
    sudo systemctl stop myapp.service
    
  • 重启服务
    sudo systemctl restart myapp.service
    
  • 查看所有服务的状态
    systemctl list-units --type=service
    
  • 禁用服务自启动
    systemctl disable service_name.service
    
    这个命令取消设置服务的自启动。
  • 重新载入 systemd 配置
    systemctl daemon-reload
    
    当你修改了任何 systemd 的配置文件后,使用这个命令重新加载配置,使改动生效。
  • 查看系统是否活跃
    systemctl is-active service_name.service
    
    检查指定服务是否活跃(正在运行)。

这些命令覆盖了 systemctl 的基本使用,并提供了对服务进行管理的全面工具。通过这些命令,系统管理员可以有效地管理和维护系统服务。

结语

通过本教程,你已经学会了如何在 Linux 系统上使用 systemctl 管理自定义的 Python 服务。这使你能够更好地控制应用的运行,并确保它们在需要时始终可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

teleport内置组件和plugins插件基本使用

teleport内置组件和plugins插件基本使用 一. teleport内置组件使用1. 模板中使用teleport1. public中模板中不在app元素中的任意html元素 二. plugins插件使用1.创建插件的方式&#xff1a;2.main.js中引用 一. teleport内置组件使用 在组件化开发中&#xff0c;我们封装一个组…

5.合并两个有序数组

文章目录 题目简介题目解答解法一 &#xff1a;合并后排序解法二&#xff1a;双指针排序 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 合并两个有序数组 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一 &#xff1a;合并后排序 假设我们要合…

NXP i.MX8系列平台开发讲解 - 3.11 Linux PCIe设备调试(WIFI模块)

专栏文章目录传送门&#xff1a;返回专栏目录 文章目录 目录 1. WIFI 模块简单介绍 2. 设备驱动原理介绍 3. PCIE WIFI驱动实例分析 3.1 查看设备树 3.2 wifi 设备驱动代码分析 3.3 内核配置选项 4. WIFI驱动调试相关 根据前面对PCIe的讲解&#xff0c;对PCIe的整体都有…

练习题(2024/5/7)

1验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 …

Grafana 重置 admin 密码

Grafana 重置 admin 密码 1. 已知 admin 密码修改新密码1.1 方法一&#xff1a;常规方法1.2 方法二&#xff1a;API 接口 2. 忘记 admin 密码重置密码2.1 方法一&#xff1a;命令行2.2 方法二&#xff1a;修改数据库2.3 方法三&#xff1a;将某个用户提权为 admin 权限用户 参考…

c++ cpp 在类中执行线程 进行恒定计算

在编程中&#xff0c;顺序执行是常见的模式&#xff0c;但是对cpu的利用率不是很高&#xff0c;采用线程池&#xff0c;又太麻烦了&#xff0c;原因是还得不断地把任务拆分&#xff0c;扫描返回值。 如果 初始化n个类的时候&#xff0c;传递数据自身即可异步计算&#xff0c;那…

看完这篇文章我奶奶都懂Opentracing了 (三)

三. 扩展点分析 通过前面的分析我们了解到&#xff0c;Opentracing对分布式链路追踪中的各种概念进行了统一的定义&#xff0c;某种程度上&#xff0c;已经成为分布式链路追踪的规范。 在Java语言中&#xff0c;Opentracing定义了诸如Span和Tracer等概念对应的接口&#xff0…

JavaWEB 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

AIGC绘画辅助网站

Midjourney风格样式 Midjourney Style Classifier | Andrei Kovalevs Midlibrary

124.反转链表(力扣)

题目描述 代码解决&#xff08;思路1&#xff1a;双指针&#xff09; class Solution { public:ListNode* reverseList(ListNode* head) {ListNode*temp;//保存cur下一个节点ListNode*curhead;ListNode*preNULL;while(cur){tempcur->next;// 保存一下 cur的下一个节点&#…

【图论】Floyd

算法-Floyd 前置知识 dp基础图论基础 思路 Floyd 是一种优秀的全源最短路算法。 它的执行过程类似于 dp&#xff0c;如下&#xff1a; 首先我们定义 d [ i ] [ j ] d[i][j] d[i][j] 为节点 i i i 到节点 j j j 的最短距离。 我们枚举中转节点 k k k&#xff0c;再枚举两个…

接口自动化测试的最佳实践和常见错误!

引言&#xff1a; 随着软件开发的不断演进&#xff0c;接口自动化测试在软件质量保障的过程中扮演着越来越重要的角色。良好的接口自动化测试可以提升测试效率、减少人力成本&#xff0c;但同时也存在着一些常见错误。本文将从零到一详细介绍接口自动化测试的最佳实践和常见错…

open-vm-tools使用虚机的拷贝/粘切

open-vm-tools 是一组用于 VMware 虚拟机中的开源工具,它们提供了一些与虚拟机操作和管理相关的功能。这些工具与 VMware 虚拟化平台集成,可以在虚拟机中提供更好的性能和功能。以下是一些 open-vm-tools 提供的功能: 1. 虚拟机增强功能: open-vm-tools 提供了与 VMware 虚…

node.js中的断言

assert.ok(value, [message])&#xff1a;如果value不为真&#xff0c;则抛出一个AssertionError&#xff0c;可选地包含message。 const assert require(assert); assert.ok(true); // 没有错误 assert.ok(false, 这里应该是true); // 抛出 AssertionError: 这里应该是tru…

突破传统 重新定义:3D医学影像PACS系统源码(包含RIS放射信息)实现三维重建与还原

突破传统&#xff0c;重新定义PACS/RIS服务,洞察用户需求&#xff0c;关注应用场景&#xff0c;新一代PACS/RIS系统&#xff0c;系统顶层设计采用集中分布式架构&#xff0c;满足医院影像全流程业务运行,同时各模块均可独立部署&#xff0c;满足医院未来影像信息化扩展新需求、…

Ecovadis认证是什么?

Ecovadis认证是一种企业社会责任&#xff08;CSR&#xff09;评估和评级的认证&#xff0c;旨在衡量企业在环境、劳工和人权、道德以及可持续采购四个方面的可持续发展表现。该认证已成为全球范围内许多公司和组织的评估标准之一&#xff0c;有助于提高企业的会声誉和可持续发展…

Linux专栏10:Linux权限详解(上)

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Linux专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Linux权限详解&#xff08;上&#xff09; 编号&#xff1a;10 文章…

Leetcode274

题目 274. H 指数 思路 题目有点绕&#xff0c;最开始就想到了对数组进行排序&#xff0c;那就可以通过下标来得到有多少篇论文的引用大于等于当前论文的引用&#xff0c;如果大于了当前论文的引用量则将当前论文的引用量更新为h值。后面考虑到[3,3]这种情况&#xff0c;也就是…

String.intern()的作用

在Java中&#xff0c;String.intern() 是一个非常特殊的方法&#xff0c;它用于处理字符串常量池。字符串常量池&#xff08;String Pool&#xff09;是Java堆内存的一个特定区域&#xff0c;用来存储字符串字面量和显式调用 intern() 方法的字符串实例。这个池的目的是避免在J…

商务分析方法与工具(四):Python的趣味快捷-简单函数你真的会用吗?

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…