使用Python和systemctl管理Linux系统服务的简便工具

news2025/4/19 6:55:02

前言

   本文介绍了一个实用工具,用于在Linux系统上管理systemctl服务。该工具提供了创建、安装、卸载、启动和停止服务的功能,帮助用户轻松地管理和控制正在运行的服务。

通过使用该代码,你可以轻松地执行以下操作:

  • 创建服务文件:根据指定的内容创建一个systemctl服务文件。
  • 安装服务:创建一个服务文件,将其复制到系统的服务目录中,并添加为系统服务。
  • 卸载服务:从系统中移除已安装的服务。
  • 启动服务:使用systemctl命令启动已安装的服务。
  • 停止服务:使用systemctl命令停止已安装的服务。

   这个工具使得服务管理更加简单和高效,无需手动执行复杂的命令。你可以在开发环境和生产环境中使用它来管理和控制服务,提高工作效率和减少错误。

总之,这段代码提供了一种简单而可靠的方式来管理systemctl服务,方便你对服务进行管理和控制。

一、方法

import os
import sys
import subprocess

# 服务名称:*.service
SERVICE_NAME = "alyddns.service"
SERVICE_FILE_PATH = f"/etc/systemd/system/{SERVICE_NAME}"


def create_service_file():
    """服务文件内容"""
    service_content = """
[Unit]
Description=aly DDNS
After=network.target network-online.target systemd-networkd-wait-online.service

[Service]
WorkingDirectory=/home/
ExecStart=/usr/local/bin/python3 alyddns.py
Restart=on-failure
RestartSec=10s
KillMode=mixed

[Install]
WantedBy=multi-user.target
"""
    # 去除第一行空格
    service_content = service_content.lstrip()
    with open(SERVICE_FILE_PATH, 'w') as f:
        f.write(service_content)


def install_service():
    """创建systemctl服务"""
    create_service_file()
    try:
        subprocess.run("systemctl daemon-reload", shell=True)
        subprocess.run(f"systemctl enable {SERVICE_NAME}", shell=True)
        subprocess.run(f"systemctl start {SERVICE_NAME}", shell=True)
        print(f"服务安装成功,请使用 `systemctl status {SERVICE_NAME}` 查看状态")
    except Exception as e:
        print("服务安装失败:", e)


def uninstall_service():
    """卸载systemctl服务"""
    if os.path.exists(SERVICE_FILE_PATH):
        try:
            subprocess.run(f"systemctl stop {SERVICE_NAME}", shell=True)
            subprocess.run(f"systemctl disable {SERVICE_NAME}", shell=True)
            subprocess.run(f"rm {SERVICE_FILE_PATH}", shell=True)
            print("服务卸载成功")
        except Exception as e:
            print("服务卸载失败:", e)
    else:
        print(f"{SERVICE_NAME} 服务不存在")


def start_service():
    """启动systemctl服务"""
    if os.path.exists(SERVICE_FILE_PATH):
        try:
            subprocess.run(f"systemctl start {SERVICE_NAME}", shell=True)
            print(f"服务启动成功,请使用 `systemctl status {SERVICE_NAME}` 查看状态")
        except Exception as e:
            print("服务启动失败:", e)
    else:
        print(f"{SERVICE_NAME} 服务不存在")


def stop_service():
    """停止systemctl服务"""
    if os.path.exists(SERVICE_FILE_PATH):
        try:
            subprocess.run(f"systemctl stop {SERVICE_NAME}", shell=True)
            print("服务停止成功")
        except Exception as e:
            print("服务停止失败:", e)
    else:
        print(f"{SERVICE_NAME} 服务不存在")


if __name__ == "__main__":
    if len(sys.argv) > 1:
        if len(sys.argv) == 2:
            if sys.argv[1] == 'install':
                install_service()
                sys.exit()
            elif sys.argv[1] == 'uninstall':
                uninstall_service()
                sys.exit()
            elif sys.argv[1] == 'start':
                start_service()
                sys.exit()
            elif sys.argv[1] == 'stop':
                stop_service()
                sys.exit()
            else:
                print("无效参数, 只支持:install、uninstall、start、stop")
                sys.exit()

        else:
            print("无效的参数数量!")
            sys.exit()

    else:
        # 不传入参数时,运行功能代码
        print("运行程序")

在这里插入图片描述

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

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

相关文章

解决centos离线安装cmake找不到OpenSSL问题

安装方法:见另外一篇文章 https://blog.csdn.net/zhongxj183/article/details/118488629 按照文章下载了离线gcc 和OpenSSL,以及在cmake官网下载了最新版 cmake-3.27.4.tar.gz 顺利安装gcc 和OpenSSL 但执行编译cmake时,报错找不到OpenSSL…

软考A计划-网络工程师-必考知识点-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

液冷连接器快速接头

液冷连接器快速接头常用介质 水、乙二醇水溶液、纯乙二醇、空调制冷剂和硅油等。 液冷连接器快速接头应用 强振动冷却回路手动连接雷达数据中心电子冷却吊舱 液冷连接器快速接头材质 主体材料不锈钢或经表面处理的铝合金 密封圈选用低温硅橡胶或HNBR 液冷连接器快速接头主…

5G智能网关如何解决城市停车痛点难点

2023年上半年,我国汽车新注册登记1175万辆,同比增长5.8%,88个城市汽车保有量超过100万辆,北京、成都等24个城市超过300万辆。随着车辆保有量持续增加,停车难问题长期困扰城市居民,也导致城市路段违停普遍、…

架构设计:Docker容器化部署

在现代软件开发和部署中,Docker 容器化技术已经成为一种重要的解决方案。它不仅简化了应用程序的构建和部署过程,还提供了跨环境一致性、可移植性和高效性。本文将介绍一个完整的 Docker 容器化部署架构设计,帮助您深入了解如何将应用程序成功…

mysql中的with

概念 WITH 子句是 MySQL 中的一种 SQL 结构,又称为 Common Table Expression (CTE)。它在不影响原有 SQL 语句的情况下,允许开发人员临时创建一个内存中的结果集,然后对其进行操作。 作用 WITH 子句的主要用途是创建一个暂时的结果集&…

NewStarCTF 2022 web方向题解 wp

----------WEEK1---------- BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP] 先看题目,要传参加绕过。 分析一下代码:首先get一个datadata://test/plain,Wel…。然后key1和2用数组可以绕过。num2077a可以绕过弱类型。eval()中的php语句被#注释了&#xff0c…

SpringBoot中间件ElasticSearch

Elasticsearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的 全文搜索引擎 ,基于RESTful web 接口。 Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elastics…

软考(一)进制的表示(二进制,八进制,十进制,十六进制)

进制的转换 一、进制的表示 二进制(B): 0 , 1 , 10 , 11 , 100 , 101 , 110 , 111 , 1000 0,1,10,11,100,101,110,111,1000 0,1,10,11,100,101,110,111,1000 对应的十进制是: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 0,1,2,3,4,5,6…

视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流&#…

长安链并行调度机制(2):DAG构建和从节点执行流程

长安链采用高效的并行调度方式执行交易,了解长安链交易调度、冲突检测和DAG构建流程有助于开发者更好地理解长安链并行调度的运行机制,帮助开发者编写高质量、低冲突的智能合约,更好地构建区块链应用。 上一篇内容我们说明了长安链交易调度、…

STM32驱动SD卡(SPI)方式

外观 代码(免费分享) 接线 5V供电 CS接PA3 剩下如图按照硬件SPI1接线 注意事项 使用杜邦线接线非常不稳定!!! 使用杜邦线接线非常不稳定!!! 使用杜邦线接线非常不稳定!!&#…

如何将 Animate 动画与 After Effects 中的 Cinema 4D 渲染合并?

如何将手动动画 2D 元素添加到 3D 渲染中,有多种方法可以做到这一点,但您需要确保在动画的两侧都进行设置,以确保在合成时能够充分利用资源。上面的视频确实贯穿了一个非常实用且高效的工作流程,以实现正确的这些效果。 创建参考…

沉浸式VR虚拟实景样板间降低了看房购房的难度

720 全景是一种以全景视角为特点的虚拟现实展示方式,它通过全景图像和虚拟现实技术,将用户带入一个仿佛置身其中的沉浸式体验中。720 全景可以应用于旅游、房地产、展览等多个领域,为用户提供更为直观、真实的体验。 在房地产领域&#xff0c…

乡村振兴战略下传统村落文化旅游设计书辉瑞

乡村振兴战略下传统村落文化旅游设计书辉瑞

vue3+ts+tinynce富文本编辑器+htmlDocx+file-saver 配合实现word下载

vue3 请下载html-docx-js-typescript,否则会报错类型问题 //报告导出word import * as htmlDocx from "html-docx-js-typescript";//ts-ignore import { saveAs } from file-saver// 下载文件, const downloadFile (row)> {try {const co…

24个非常实用的Python小技巧

嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.唯一性 以下方法可以检查给定列表是否有重复的地方,可用set()的属性将其从列表中删除。 x [1,1,2,2,3,2,3,4,5,6] y [1,2,3,4,5] len(x) len(set(x)) # False len(y) len(set(y)) # Tr…

压力变送器与传统压力表相比,有哪些优势?

在压力变送器还未普及的时候,工业自动化生产中的压力数据普遍采用压力表进行数据采集,但是压力表数据在使用的过程中,经常存在记录不方便、校验周期短、故障率高的问题,随着数字化在工业生产中的广泛应用,压力变送器逐…

[EasyX库安装介绍讲解】超详细入门级

基本说明 EasyX 是针对 C 的图形库,可以帮助 C/C 初学者快速上手图形和游戏编程。 比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习…

安防视频监控/视频集中存储/云存储平台EasyCVR无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…