43 | linux 服务管理service 和 systemctl

news/2025/2/7 7:38:09/

这里写目录标题

  • 1 systemctl 命令用法
    • 1.1 列出所用可用单元
    • 1.2 列出所有运行的单元
    • 1.3 检查某个单元是否启用
    • 1.4 列出所有服务
    • 1.5 Linux 中如何检查服务状态
    • 1.6 激活服务并启用或禁用服务
    • 1.7 如何屏蔽或显示服务
    • 1.8 杀死服务
  • 2 编写服务
    • 2.1 添加服务文件
    • 2.2 编写.service 文件
      • 2.2.1 Unit
      • 2.2.2 Service
      • 2.2.3 [Install]
    • 2.3 设置开机自启动
    • 2.4 查询服务状态

linux 服务管理的两种方式为 service 和 systemctl。systemd 是 Linux 系统最新的初始化系统 (init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能并发启动更多进程。systemd 对应的进程管理命令是 systemctl。

1 systemctl 命令用法

1.1 列出所用可用单元

systemctl list-unit-files

1.2 列出所有运行的单元

systemctl list-units

1.3 检查某个单元是否启用

eg:cmak.service

systemctl is-enabled cmak.service

1.4 列出所有服务

systemctl list-unit-files ?Ctype=service

1.5 Linux 中如何检查服务状态

eg:cmak.service

systemctl start cmak.service
systemctl restart cmak.service
systemctl stop cmak.service
systemctl reload cmak.service
systemctl status  cmak.service

1.6 激活服务并启用或禁用服务

eg:即系统启动时自动启动 cmak.service 服务

systemctl is-active cmak.service
systemctl enable cmak.service
systemctl disable cmak.service

1.7 如何屏蔽或显示服务

eg: cmak.service

systemctl mask cmak.service
ln -s '/dev/null' '/etc/systemd/system/cmak.service'
systemctl unmask cmak.service
rm '/etc/systemd/system/cmak.service'

1.8 杀死服务

systemctl kill crond

2 编写服务

2.1 添加服务文件

在 /etc/systemd/system/ 文件目录下添加.service 服务文件

2.2 编写.service 文件

[Unit]
Description=test service
ConditionFileIsExecutable=/etc/init.d/test.sh
After=network.service
[Service]
Type=forking
ExecStart=-/etc/init.d/test.sh start
ExecStop=-/etc/init.d/test.sh stop
[Install]
WantedBy=multi-user.target

从上面可以看出.serive 文件包括三个部分:[Unit]、[Service]、[Install]。

2.2.1 Unit

  • Description:对当前服务的简单描述
  • After:指定.serive 在哪些服务之后进行启动
  • Before:指定.serive 在哪些服务之前进行启动
  • Requires:指定服务依赖于哪些服务(强依赖关系,一旦所依赖服务异常,当前服务也随之停止)
  • Wants:指定服务依赖于哪些服务(弱依赖关系,所依赖服务异常不影响当前服务正常运行)

2.2.2 Service

**Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle **

  • simple:ExecStart 字段启动的进程为该服务的主进程
  • forking:ExecStart 字段的命令将以 fork () 方式启动,此时父进程将会退出,子进程将成为主进程
  • ExecStart:定义启动进程时执行的命令
  • ExecStop:停止服务时执行的命令
  • EnvironmentFile: 环境配置文件,用来指定当前服务启动的环境变量
  • ExecReload:重启服务时执行的命令
  • ExecStartPre:启动服务之前执行的命令
  • ExecStartPost:启动服务之后执行的命令
  • ExecStopPost:停止服务之后执行的命令
  • RemainAfterExit:设为 yes,表示进程退出以后,服务仍然保持执行
  • RestartSec:重启服务之前需要等待的秒数

KillMode:定义 Systemd 如何停止服务,可以设置的值如下

  • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
  • process:只杀主进程
  • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  • none:没有进程会被杀掉

Restart:定义了退出后,Systemd 的重启方式可以设置的值如下:

  • no(默认值):退出后不会重启
  • on-success:当进程正常退出时(退出状态码为 0),才会重启
  • on-failure:当进程非正常退出时(退出状态码非 0),包括被信号终止和超时,才会重启
  • on-abnormal:当被信号终止和超时,才会重启
  • on-abort:当收到没有捕捉到的信号终止时,才会重启
  • on-watchdog:看门狗超时退出,才会重启
  • always:总是重启

2.2.3 [Install]

Install 一般填为 WantedBy=multi-user.target,表示多用户环境下服务被启用。

2.3 设置开机自启动

systemctl enable cmak.service

2.4 查询服务状态

systemctl status cmak.service

http://www.ppmy.cn/news/11577.html

相关文章

Lua C接口编程(二)

引言 上篇文章我们学习了C如何调用Lua,今天我们就来聊聊Lua 如何调用C。 Lua版本:Lua 5.3.5 对于Lua提供的接口有不清楚的,可以参考Lua接口官方文档 一、Lua调用C步骤 需要将C文件编译成动态库在Lua文件中使用package.cpath配置C动态库路…

C++生成.dll文件后在Python中引用(包括传递参数是double型、char*数组,接收参数也为数组)

一、问题描述 博主想要实现的C函数原型如下: double* getInfo(int flag, double xyz[], char *xodrPath)也就是需要传递参数为三个不同类型的参数,返回值为double类型的指针(数组)。 那么如何在Python中如何通过这个函数生成的…

【Linux】基础开发工具使用 --- gcc

目录 预处理 编译 汇编 链接 函数库 协助记忆 🧋GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如l…

NLP中的对话机器人——问答机器人的应用场景

引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 讲得还不错,关键是只要1分钱 FAQ问答机器人 FAQ就是一些常见问题与回答,比如https://letsencrypt.org/docs/faq/。 但是我们要做的不是一问一答…

OWASP 十大网站安全风险 (一): 注入攻击

OWASP是 open web application security project 的缩写。这个系列主要介绍这十个最多被攻击的安全漏洞。 OWASP 十大信息安全主题 1.注入攻击 (Injection) 2.无效身份认证(Broken Authentication) 3.敏感信息泄漏(Se…

C/C++内存管理

目录 一、C/C内存分布 二、C语言中动态内存管理方式 三、C内存管理方式 new/delete操作内置类型 new/delete操作自定义类型 四、operator new与operator delete函数 operator new与operator delete函数 operator new与operator delete的类专属重载(了解&…

【C进阶】指针的进阶

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析博客&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Log4j配置日志输出到数据库

功能描述 log4j日志一般输出到控制台或文件中&#xff0c;本文讲解如何将日志输出到数据库。 新建日志表 首先在数据库中创建日志存储表&#xff1a; sqlserver库 -- for sqlserver create table operate_log( log_id int primary key identity /*id*/ , class varchar(50…