参考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/sshdExecStartPre=/usr/sbin/sshd-keygenExecStart=/usrsbin/sshd –D \$OPTIONSExecReload=/bin/kill –HUP $MAINPIDKillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.target

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

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

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

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

 [Unit]Description=Multi-User SystemDocumentation=man.systemd.special(7)Requires=basic.targetConflicts=rescue.service rescure.targetAfter=basic.target rescue.service rescue.targetAllowIsolate=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已经出来了,时光过得真的很快。

init,service和systemctl的区别相关推荐

  1. service和systemctl的区别

    Linux服务管理的两种方式service和systemctl. service service命令其实是去/etc/init.d目录下,去执行相关程序,init.d目录包含许多系统各种服务的启动和停 ...

  2. service和systemctl

    一.service和systemctl的区别 在CentOS 7中,service和systemctl都是用于管理系统服务的命令.但它们有一些区别: 配置文件位置不同:service命令使用/etc/ ...

  3. linux 服务管理两种方式service和systemctl

    1.service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 # service命令启动redis脚本 service redis start # 直接启动redis ...

  4. service mysqld restart与service mysql restart的区别

    1.前言 之前,遇到过在不同 linux 系统中启动或关闭 mysql,网上查询命令大都不一样,大致分为下面三种(以重启为例): service mysql restartservice mysqld ...

  5. service mysql restart 和service mysqld restart 的区别

    service mysql restart 和service mysqld restart 的区别不是由于mysql版本的原因,而是配置的原因. mysql自带一个服务脚本,位置再MySQL的安装目录 ...

  6. linux 下的 service 和systemctl 服务管理方式

    linux 下的 service  和systemctl 服务管理方式 man service 得到:执行一个system V 风格的启动脚本 service - run a System V ini ...

  7. Service 与 Thread 的区别

    Service 与 Thread 的区别 很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来 ...

  8. Spring中的@ Component,@ Repository和@Service批注有什么区别?

    @Repository @Component , @Repository和@Service批注可以在Spring中互换使用吗,或者除了充当注解设备外,它们还提供任何特定功能吗? 换句话说,如果我有一个 ...

  9. 【原】NSMutableArray的alloc、init方法与array的区别疑问

    在项目中的这个函数里面,[NSMutableArray array]与[[NSMutableArray alloc] init];有着较明显的区别 同样是建立一个NSMutableArray临时变量, ...

最新文章

  1. 哪种编程语言又快又省电?有人对比了27种语言
  2. 跟小博老师一起学Servlet ——Servlet之HttpServletResponse
  3. 上升沿_为什么示波器上升时间 Tr=0.35/BW ?
  4. 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访
  5. pygame判断鼠标左键_美商海盗船DarkCoreRGB Pro SE无线电竞鼠标评测
  6. [C++ Mind Map] class and memory
  7. expected initializer before
  8. JDBC笔记-李伟杰版
  9. php7 imagick扩展,php7安装imagick扩展
  10. 腾讯云三大自研数据库之一 TBase 开源后首次重磅升级,复杂查询性能最高提升十倍
  11. pandas 筛选出满足条件的行并赋值
  12. Unity3D-后期处理 Post-process Volume Profile
  13. python关闭csv文件_Python文件处理(txt、csv文件读取)
  14. Excel高级函数应用总结
  15. bzoj 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱【区间dp】
  16. ISUP信令REL原因值
  17. 苹果强制使用HTTPS传输后APP开发者必须知道的事
  18. 麻省理工公开课人工智能笔记六
  19. 国际上进行盲源分离研究的主要学者及其研究方向
  20. 免费的DNS服务OpenDNS、Google Public DNS

热门文章

  1. Linux rm命令:删除文件或目录
  2. 【三维深度学习】多视角场景点云重建模型PointMVS
  3. Java—正则表达式(Pattern类和Matcher类)
  4. Java—static关键字
  5. css基础选择器 1204
  6. 云题库进入其它章节的办法 0925
  7. 办公自动化-使用python-docx生成文档-0223
  8. redis-配置主从-实际操作-over
  9. 设置centos上的redis可以被访问
  10. 数据结构与算法-索引1909