前言
本文介绍了一个实用工具,用于在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("运行程序")