【转载】Linux systemctl 任务详解

news/2025/3/29 16:50:16/文章来源:https://www.cnblogs.com/ycsno1/p/18793731

linux自启任务详解

linux和windows自启动服务的概念

linux下的自启动任务跟windows服务两者的概念有点不一样;

linux下自启任务只是一个单纯的脚本类型的文本,用该文本描述如何启动一个可执行程序(或可执行的脚本),该文本内的描述语句开机时会根据特定规则得以被执行;因此linux自启服务其实是由两个东西组成:自启任务文件+可执行程序(脚本)

windows服务则是一个对函数入口有特定要求的可执行程序

关于windows的服务有兴趣的可以查看windows服务入门详解,这里不再赘述

linux 服务简介

在Linux系统中,我们经常需要将一些应用程序(或脚本)设置为后台自启服务形式,以便它们可以在系统启动时自动运行,并可以通过系统服务管理工具进行控制。本文将以test_demo.service为例,详细介绍如何在ubuntu 20.04 Linux下创建自定义的systemd服务。

前提条件

  • 确保你的Linux系统使用的是systemd作为初始化系统(大多数现代Linux发行版都使用systemd)。
  • 确保你有足够的权限来创建和修改系统服务(通常需要root权限)。

一个最简单的服务单元文件

test_demo.service内容如下:

[Unit]
Description=Start up test_demo[Service]
Type=simple
ExecStart=/home/lijilei/xlib_xdnd/test_demo
Restart=on-failure[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

关于这个文件有两点注意点:

  1. 文件的名字最好是你将要执行的可执行文件名字.service

比如我这里将要执行的ExecStart可执行文件为/home/lijilei/xlib_xdnd/test_demo(绝对路径),那我自己创建一个自启service服务单元文件名为test_demo.service;服务单元文件的生效路径为/etc/systemd/system/路径

cp test_demo.service /etc/systemd/system/

  1. 确保你service文件中将要执行的文件拥有可执行权限

chmod + x text_demo

服务单元文件内容字段详解

systemd中,一个单元(Unit)文件定义了如何启动、停止和管理一个服务或进程。单元文件通常有三个主要部分:[Unit]、[Service]和[Install]。下面详细介绍这三个部分的作用和常用指令。

[Unit] 部分

[Unit]部分定义了单元的元数据和依赖关系。它是所有单元文件的首要部分,用于描述单元的属性和它与其他单元之间的关系。

Description:提供单元的简短描述。
Documentation:指定有关该单元的更多文档的链接或文件位置。
Requires:(强依赖)如果这些服务没有被激活,那么当前单元将无法启动。
Wants:(弱依赖)表示当前单元想要这些服务启动,但不是必需的。
BindsTo:如果指定的服务停止了,当前单元也会停止。
After:当前单元只有在列出的其他单元启动后才启动。
Before:当前单元需要在列出的其他单元启动之前启动。
Conflicts:与当前单元冲突的服务,如果这些服务运行,当前单元将不会启动。
Condition…:定义了在哪些条件下单元可以被启动,如果不满足条件,单元将不会被启动。

[Service] 部分

[Service]部分定义了如何启动、运行和管理服务的进程。包含两个强制参数:ExecStart、Type 和其他一些可选参数。 这部分是服务类型单元文件特有的。

Type:定义服务的启动类型,如simple、forking、oneshot、dbus、notify等。
simple:默认类型,启动一个进程并持续运行。
forking:适用于传统的UNIX服务,父进程启动子进程后退出。
oneshot:启动一个进程,该进程执行一次后退出。
dbus:服务通过D-Bus启动。
notify:服务启动后会通知systemd。
ExecStart:启动服务时执行的命令。
ExecStop:停止服务时执行的命令。
ExecReload:重新加载服务时执行的命令。
Restart:定义在何种情况下服务将被重启,如on-failure、always、unless-stopped等。
User:指定以哪个用户身份运行服务。
Group:指定以哪个用户组运行服务。
WorkingDirectory:指定服务的工作目录。
Environment:设置环境变量。
EnvironmentFile:从文件中读取环境变量。
PIDFile:指定PID文件的位置,通常与forking类型一起使用。
PrivateTmp:为服务提供独立的临时目录。
TimeoutStartSec:设置启动服务的超时时间。
KillMode:定义如何杀死服务的进程。

[Install] 部分

[Install]部分定义了如何安装单元文件,即如何使服务在系统启动时自动启动。

WantedBy:指定服务想要加入的目标(Target)。当执行systemctl enable 服务名时,会在/etc/systemd/system/目录下的相应目标单元的.wants子目录中创建一个符号链接到服务的单元文件。
RequiredBy:指定服务必需加入的目标(Target)。与WantedBy类似,但用于更强的依赖关系。
这三个部分共同定义了systemd单元的行为和特性,使得服务管理变得更加灵活和强大。通过正确配置这些部分,你可以确保你的服务按照预期启动、运行和停止。

使用systemctl命令管理自定义Service服务

  1. 启用服务

启用服务,以便在系统启动时自动启动:
sudo systemctl enable test_demo.service

  1. 启动服务

手动启动服务进行测试:
sudo systemctl start test_demo.service

  1. 检查服务状态

检查服务的状态是否在运行:
sudo systemctl status test_demo.service

  1. 重新加载systemd配置

如果你修改了服务单元文件,需要重新加载systemd的配置:
sudo systemctl daemon-reload

systemctl

systemctl 是 systemd 系统和服务管理器的命令行工具,用于控制systemd系统和服务管理器。以下是systemctl的一些常用命令和选项的详细说明:

服务管理命令

systemctl start test_demo.service:启动指定的服务。
systemctl stop test_demo.service:停止指定的服务。
systemctl restart test_demo.service:重启指定的服务。
systemctl reload test_demo.service:重新加载服务的配置文件,不中断服务。
systemctl status test_demo.service:显示服务的状态。
systemctl enable test_demo.service:在系统启动时启用服务。
systemctl disable test_demo.service:在系统启动时禁用服务。
systemctl reenable test_demo.service:重新启用服务,并修复符号链接。
systemctl preset test_demo.service:检查服务是否已启用,如果没有,则启用它。
systemctl mask test_demo.service:禁用服务,并阻止它被启动。
systemctl unmask test_demo.service:取消屏蔽服务。
systemctl isolate 目标.target:切换到指定的目标(例如,启动到特定的运行级别)。

单元文件管理命令

systemctl list-units:列出所有活动(加载并激活)的单元。
systemctl list-units --type=service:仅列出服务类型的单元。
systemctl list-unit-files:列出所有安装的单元文件。
systemctl is-active test_demo.service:检查服务是否活跃(running 或 active)。
systemctl is-enabled test_demo.service:检查服务是否设置为在启动时启用。
systemctl is-failed test_demo.service:检查服务是否失败。

系统和会话命令

systemctl halt:停止系统并关闭电源。
systemctl poweroff:停止系统并关闭电源。
systemctl reboot:重启系统。
systemctl suspend:将系统置于挂起状态。
systemctl hibernate:将系统置于休眠状态。
systemctl hybrid-sleep:将系统置于混合睡眠状态。
systemctl rescue:进入救援模式。
systemctl emergency:进入紧急模式。

配置和诊断命令

systemctl daemon-reload:重新加载 systemd 配置。
systemctl show test_demo.service:显示服务的属性。
systemctl set-property test_demo.service 属性名称=属性值:动态更改服务的属性。
systemctl edit test_demo.service:编辑服务的 drop-in 单元文件。
systemctl cat test_demo.service:显示服务的完整单元文件,包括 drop-in 文件。

日志和日志管理命令

journalctl:查看和分析 systemd 服务的日志。
journalctl -u test_demo.service:查看指定服务的日志。
journalctl -r:逆序显示查看日志。
journalctl -f:查看实时日志。
journalctl -b:显示当前启动的日志。
journalctl -b -1:显示上一次启动的日志。
journalctl -n 行数:查看日志限制输出行数
journalctl --since “时间”:显示指定时间后的日志。
journalctl --until “时间”:显示指定时间前的日志。eg:journalctl --since “2023-12-31 00:00:00” --until "2023-12-31 23:59:59"显示2023年12月31日全天的日志
journalctl --vacuum-size=500M:设置日志文件的最大大小。
journalctl --vacuum-time=7days:设置日志文件的最长保存时间。

注意事项

确保ExecStart、ExecStop等指令中使用的是绝对路径。
使用systemctl enable和systemctl disable来管理服务的自启动,而不是手动创建启动链接。
使用systemctl is-enabled来检查服务是否设置为自启动。
使用systemctl restart来重启服务,而不是直接杀死进程。
使用journalctl -u test_demo.service来查看服务的日志。
确保服务脚本或应用程序具有适当的错误处理和日志记录。
如果服务需要绑定到特定端口,确保防火墙规则允许该端口的流量。
对于需要频繁重启的服务,考虑使用RestartSec来设置重启间隔。
通过以上步骤,可以在Linux系统中创建和管理自定义的systemd服务。这为自动化和系统级别的管理提供了强大的工具。

 

转载来自:https://blog.csdn.net/qq_37059136/article/details/143914519

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

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

相关文章

ThreeJs-16智慧城市项目(重磅以及未来发展ai)

![GIF](https://img2023.cnblogs.com/blog/2680817/202503/2680817-20250303164902745-1619665311.gif)项目源码:https://gitee.com/hq8466/threecity-com 写在前面:很早就弄完了的,只是一直说挑个黄道吉日发上来,托了这么久也没选到什么节日,今天天气不错就发了吧,然后后…

什么是最小权限原则?

一、最小权限原则是什么? 随着网络威胁变得越来越复杂,对强大安全实践的需求在现代企业运营中已根深蒂固。组织致力于保护他们的数据,无论是添加额外的验证层、加密信息还是控制网络流量。最小权限原则 (PoLP) 就是这样一种安全实践,它已成为整个组织的基本实践,无论其性…

易基因:m5C RNA甲基化测序(m5C MeRIP-seq)

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 m5C是RNA百余种修饰中研究较多的一种。m5C存在于tRNA上时,可以对翻译进行调节;存在于rRNA上时,可以对核糖体的生物合成进行质控;存在于mRNA上时,则可以影响mRNA的结构、稳定性及翻译过程。 m5C RNA修饰的…

压测实践案例

压测如何判断是依赖服务瓶颈 背景:优化网关代码,通过压测针对异常指标判断瓶颈 1.当发现响应曲线上升。2.简单方式使用另外一个接口轮询服务在冒尖的时候判断是否是服务异常 第一组 第二组第三组第四组

基于Python程序访问本地部署的DeepSeek和硅基流动DeepSeek API

基于Python程序访问本地部署的DeepSeek和硅基流动DeepSeek API前排提醒: 1. 本地通过Ollama部署DeepSeek,部署版本为 deepseek-r1:1.5b,若还未进行本地部署,可以参考博客Windows系统上使用Ollama本地部署DeepSeek 2. 线上API使用的是硅基流动(siliconflow)的DeepSeek API…

supOS蓝卓工业互联网与iNeuOS工业互联网操作系统对比

最近有一个企业正在调研工业互联网平台,其中调研的是supOS蓝卓工业互联网和iNeuOS工业互联网操作系统。让我们给出一个对比情况表,我们自己总结了一份,由于不太了解supOS,于是也问了deepseek。 最近有一个企业正在调研工业互联网平台,其中调研的是supOS蓝卓工业互联网和…

ASE2N50-ASEMI工业电源专用ASE2N50

ASE2N50-ASEMI工业电源专用ASE2N50编辑:ll ASE2N50-ASEMI工业电源专用ASE2N50 型号:ASE2N50 品牌:ASEMI 封装:TO-220F 批号:最新 最大漏源电流:2A 漏源击穿电压:500V RDS(ON)Max:5.0Ω 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道MOS管、…

Hack The Box-Cap靶机

该靶机通过信息收集拿到大致信息,利用IDOR访问控制缺陷漏洞获得目标流量包,通过流量分析获取到ftp流量包存在用户名密码,可以ftp登录/ssh登录拿到第一个flag,利用linpeas.sh内网收集工具得到python存在UID提权漏洞,查看ctfobins提权,在/root下发现第二个flag靶机信息一、…

安装使用抓包神器:Whistle

来到查看抓包请求的页面,可见显示十分的全面还能显示树状图,根据域名进行区分,功能十分强大!安装步骤1.安装Node 因为Whistle是基于Node实现的跨平台web调试代理工具,所以我们需要先去安装Node环境 Node.js (nodejs.org) 直接下载即可2.安装Whistle Node安装成功后,执行如…

PCIe 四种地址空间介绍

PCIe架构定义了4种地址空间:配置空间、Memory空间、IO空间和message空间。1. 配置空间 每个PCIe Function都有4KB的配置空间(Configuration Space)。前256 Bytes是和PCI兼容的配置空间,剩余的是PCIe扩展配置空间(Extended Configuration Space)。 PCIe配置空间如下图所示,地…

DeepSeek 0324版本 前端代码编写能力实测

deepseek发布了一个小版本的更新。这次web端的代码编写能力增强了。来看下我用最新的deepseekv3-0324版本生成的两个前端html程序。 第一个是公司年会自动抽奖程序。 第二个是7天 天气预报的卡片。 先看第一个程序的提示词: “帮我生成一个自动抽奖的html程序,输入人员名单后…