init,service和systemctl的区别

2023-11-08

参考http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

1、service
service是一个脚本命令,分析service可知是去/etc/init.d目录下执行相关程序。service可以和chkconfig结合使用。
服务配置文件存放目录/etc/init.d/,此目录下存放着许多脚本。

service命令的使用举例:

# 启动sshd服务
service sshd start
# 设置sshd服务开机启动
chkconfig sshd start

2、systemd

centos7版本中使用了systemd,systemd同时兼容service, 因为systemd本身是一个概念,其对应的命令就是systemctl

Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。
使用systemd的目的是获取更快的启动速度。

为了减少系统启动时间,systemd的目标是:
尽可能启动较少的进程
尽可能将更多进程并发启动

可以去查看系统进程的pid,initd的pid是0,如果支持systemd的系统的systemd进程pid为1

systemd把不同的资源称为Unit
每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit
存放目录:/etc/systemd/system和/usr/lib/systemd/system

对于有先后依赖关系的任务
systemctl融合service和chkconfig功能

systemctl的使用例如:

# 开启服务
systemctl start sshd.service
# 设置开机启动
systemctl enable sshd.service
# 这里开机自启本质上是建立一个软链接 ln -s /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service

下面的内容转载自(其链接已经不可访问了)
http://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/

Systemd 的使用
下面只是给出简单的描述,让您对 systemd 的使用有一个大概的理解。具体的细节内容太多,即无法在一篇短文内写全,本人也没有那么强大的能力。还需要读者自己去进一步查阅 systemd 的文档。
系统软件开发人员
开发人员需要了解 systemd 的更多细节。比如您打算开发一个新的系统服务,就必须了解如何让这个服务能够被 systemd 管理。这需要您注意以下这些要点:
后台服务进程代码不需要执行两次派生来实现后台精灵进程,只需要实现服务本身的主循环即可。
不要调用 setsid(),交给 systemd 处理
不再需要维护 pid 文件。
Systemd 提供了日志功能,服务进程只需要输出到 stderr 即可,无需使用 syslog。
处理信号 SIGTERM,这个信号的唯一正确作用就是停止当前服务,不要做其他的事情。
SIGHUP 信号的作用是重启服务。
需要套接字的服务,不要自己创建套接字,让 systemd 传入套接字。
使用 sd_notify()函数通知 systemd 服务自己的状态改变。一般地,当服务初始化结束,进入服务就绪状态时,可以调用它。
Unit 文件的编写
对于开发者来说,工作量最大的部分应该是编写配置单元文件,定义所需要的单元。
举例来说,开发人员开发了一个新的服务程序,比如 httpd,就需要为其编写一个配置单元文件以便该服务可以被 systemd 管理,类似 UpStart 的工作配置文件。在该文件中定义服务启动的命令行语法,以及和其他服务的依赖关系等。
此外我们之前已经了解到,systemd 的功能繁多,不仅用来管理服务,还可以管理挂载点,定义定时任务等。这些工作都是由编辑相应的配置单元文件完成的。我在这里给出几个配置单元文件的例子。
下面是 SSH 服务的配置单元文件,服务配置单元文件以.service 为文件名后缀。
#cat /etc/system/system/sshd.service

  [Unit]
  Description=OpenSSH server daemon
  [Service]
  EnvironmentFile=/etc/sysconfig/sshd
  ExecStartPre=/usr/sbin/sshd-keygen
  ExecStart=/usrsbin/sshd –D \$OPTIONS
  ExecReload=/bin/kill –HUP $MAINPID
  KillMode=process
  Restart=on-failure
  RestartSec=42s
  [Install]
  WantedBy=multi-user.target

文件分为三个小节。第一个是[Unit]部分,这里仅仅有一个描述信息。

第二部分是 [Service] 定义,其中,
ExecStartPre 定义启动服务之前应该运行的命令;
ExecStart 定义启动服务的具体命令行语法。

第三部分是[Install],WangtedBy 表明这个服务是在多用户模式下所需要的。

那我们就来看下 multi-user.target 吧:
#cat multi-user.target

 [Unit]
 Description=Multi-User System
 Documentation=man.systemd.special(7)
 Requires=basic.target
 Conflicts=rescue.service rescure.target
 After=basic.target rescue.service rescue.target
 AllowIsolate=yes
 [Install]
 Alias=default.target

第一部分中的 Requires 定义表明 multi-user.target 启动的时候 basic.target 也必须被启动;另外 basic.target 停止的时候,multi-user.target 也必须停止。如果您接着查看 basic.target 文件,会发现它又指定了 sysinit.target 等其他的单元必须随之启动。同样 sysinit.target 也会包含其他的单元。采用这样的层层链接的结构,最终所有需要支持多用户模式的组件服务都会被初始化启动好。

在[Install]小节中有 Alias 定义,即定义本单元的别名,这样在运行 systemctl 的时候就可以使用这个别名来引用本单元。这里的别名是 default.target,比 multi-user.target 要简单一些。。。
此外在/etc/systemd/system 目录下还可以看到诸如*.wants 的目录,放在该目录下的配置单元文件等同于在[Unit]小节中的 wants 关键字,即本单元启动时,还需要启动这些单元。比如您可以简单地把您自己写的 foo.service 文件放入 multi-user.target.wants 目录下,这样每次都会被默认启动了。
最后,让我们来看看 sys-kernel-debug.mout 文件,这个文件定义了一个文件挂载点:

\#cat sys-kernel-debug.mount

[Unit]
Description=Debug File Syste
DefaultDependencies=no
ConditionPathExists=/sys/kernel/debug
Before=sysinit.target
[Mount]
What=debugfs
Where=/sys/kernel/debug
Type=debugfs

这个配置单元文件定义了一个挂载点。挂载配置单元文件有一个[Mount]配置小节,里面配置了 What,Where 和 Type 三个数据项。这都是挂载命令所必须的,例子中的配置等同于下面这个挂载命令:
mount –t debugfs /sys/kernel/debug debugfs

配置单元文件的编写需要很多的学习,必须参考 systemd 附带的 man 等文档进行深入学习。希望通过上面几个小例子,大家已经了解配置单元文件的作用和一般写法了。


我的总结:systemd功能更加强大,是某些linux发行版用来代替系统启动init和service的一个新的系统工具,同时还没有失去兼容对init的兼容性。几年前写下这篇文章的时候还在用centos7,如今centos8已经出来了,时光过得真的很快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

init,service和systemctl的区别 的相关文章

  • 在 execl 在输出中不可见之前打印

    include
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 如何在线程创建和退出时调用函数?

    include
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐

  • Android最强进程保活黑科技实现原理解密及方法

    启动Service mRemote transact transactCode mServiceData null 1 在 native 层进行 binder 通信 在Java层做进程复活的工作 这个方式是比较低效的 最好的方式是在 nat
  • 69.x的平方根(c++实现)

    给你一个非负整数 x 计算并返回 x 的 算术平方根 由于返回类型是整数 结果只保留 整数部分 小数部分将被 舍去 注意 不允许使用任何内置指数函数和算符 例如 pow x 0 5 或者 x 0 5 初看题目时 我 只觉得是一头雾水 不过这
  • 6.4 U-boot 移植

    一 ST 官方 U boot 编译测试 1 ST 官方 uboot 源码打补丁 1 1 获得 ST 官方的 uboot 源码 https www cnblogs com toutiegongzhu p 17578847 html 这里可以看
  • 我为什么放弃了 LangChain?

    编译自 机器之心 LangChain 的流行已经扭曲了围绕其本身的人工智能创业生态系统 这就是为什么我不得不坦诚自己对它的疑虑 如果你关注了过去几个月中人工智能的爆炸式发展 那你大概率听说过 LangChain 简单来说 LangChain
  • 【数据分析入门】Numpy进阶

    目录 一 数据重塑 1 1 透视 1 2 透视表 1 3 堆栈 反堆栈 1 3 融合 二 迭代 三 高级索引 3 1 基础选择 3 2 通过isin选择 3 3 通过Where选择 3 4 通过Query选择 3 5 设置 取消索引 3 6
  • VMware虚拟机——如何在VMware虚拟机环境下识别U盘

    如何在VMware虚拟机环境下识别U盘 发现问题 我们在做虚拟机实验的时候 一般时候电脑会自动让我们选择是装进真机还是装进虚拟机 但是很多时候电脑不会弹出通知 很多人遇到了插入U盘在虚拟机里面识别不到的困扰 下图就是插上了U盘没有显示U盘
  • 【计算机毕业设计】230电子设备销售网站

    一 系统截图 需要演示视频可以私聊 摘要 随着信息互联网购物的飞速发展 一般企业都去创建属于自己的电商平台以及购物管理系统 本文介绍了电子设备销售网站的开发全过程 通过分析企业对于电子设备销售网站的需求 创建了一个计算机管理电子设备销售网站
  • mybatis入门(3):typeAliases标签和package标签

    一 typeAliases标签 取别名 1 parameterType为int时可以写int Integer java lang Integer系统都可以解读为int类型 因为系统内部用typeAliases对其进行了包装 同样自己也可以对
  • 西门子PLC学习笔记四-(控制三项异步电动机的启动停止)

    本篇是学习S7 300的一个小程序 用于对PLC开发简单直观的认识 1 三项异步电动机电路图 2 PLC控制接线图 从图中可以看出控制按钮接PLC 信号模块SM的I0 0 I0 1端口 输出信号从Q4 1输出 3 PLC SM模块选择 1
  • windows服务器运行ffmpeg报错,mfplat.dll模块已加载但找不到入口点dllregisterserver

    windows服务器运行ffmpeg报错 mfplat dll模块已加载但找不到入口点dllregisterserver 1 首先找到对应的mfplat dll版本 我的是将别人win7 64位系统的mfplat dll即目录在C Wind
  • Ubuntu 22.04

    步骤一 更新Ubuntu sudo apt update sudo apt y upgrade 重启系统 sudo systemctl reboot 步骤二 然后添加另外的ppa源 添加 Ond ej Sur PPA 存储库 sudo ap
  • 【VSCode报错】 Error while fetching extensions : XHR failed

    如果安装完vscode之后插件列表加载时出现了Error while fetching extensions XHR failed说明当前网络有地方配置了代理 当然这个代理可能不是你手动配置的 可能是因为你安装了某些浏览器插件 比如IGG插
  • pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

    tep是一款测试工具 在pytest测试框架基础上集成了第三方包 提供项目脚手架 帮助以写Python代码方式 快速实现自动化项目落地 在tep项目中 自动化测试用例都是放到tests目录下的 每个 py文件相互独立 没有依赖 1个文件即1
  • python: excel假期时间提取统计

    encoding utf 8 版权所有 2023 涂聚文有限公司 许可信息查看 描述 Author geovindu Geovin Du 涂聚文 IDE PyCharm 2023 1 python 311 Datetime 2023 9 3
  • 数据库文件导出/备份

    8 2 MySql备份 导出 备份流程 1 打开数据库可视化软件 找到希望导出的文件位置 按图操作 我这里用的是sqlyog 2 选择备份表作为SQL转存 3 选择一下存储位置 接下来默认就行 4 导出完成 找到刚才选择的地址既可看到导出的
  • HTML select 下拉表单 textarea 文本域元素

    title HTML select 下拉表单 textarea 文本域元素 select 1 select 下拉菜单 应用场景 需要有一个下拉选项 有多个选项让用户选择 节约页面空间 使用 select 定义下拉列表 2 代码示例
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(一)

    大数据项目实战 第一章 项目概述 文章目录 大数据项目实战 第一章 项目概述 学习目标 一 项目需求和目标 二 预备知识 三 项目架构设计及技术选取 四 开发环境和开发工具介绍 五 项目开发流程 总结 学习目标 掌握项目需求和目标 了解项目
  • 分析优酷/土豆/pptv/乐视 HTML5、m3u8地址

    转载 http blog sina com cn s blog 4ae178ba01015hx1 html http blog sina com cn s blog 4ae178ba01015hwz html YouTube已经支持HTML
  • 步进电机与伺服电机基础知识

    步进电机与伺服电机基础知识 最近做三轴运动控制器 grbl方案 留记录 注 本文以两相电机为例 步进电机和伺服电机如果都用驱动器驱动的话 使用方式一样 所以本文以步进电机讲解 步进电机是一种与专门用于速度和位置精确控制的特种电机 它旋转是以
  • init,service和systemctl的区别

    参考http www ruanyifeng com blog 2016 03 systemd tutorial commands html 1 service service是一个脚本命令 分析service可知是去 etc init d目