开发者学堂课程【Linux 系统管理进阶第二课时:Systemd】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/789/detail/13754
Systemd
内容简介
一、Systemd 的定义
二、Systemd 的常用命令
三、查看已有的Systemd 配置文件
四、编写一个简单的Systemd 配置文件
一、Systemd 的定义
Systemd 服务是一种以.service 结尾的单元(unit)配置文件,用于控制由Systemd 控制或监视的进程。简单说,用于后台以守护精灵
(daemon)的形式运行程序
Systemd 广泛应用于新版本的RHELSUSE Linux EnterpriseCentOSFedora 和openSUSE 中,用于替代旧有的服务管理器service.
二、Systemd 的常用命令
systemctl command xxx.service
#其中command 可以是start、stop、restart、enable 等,比如:
systemctl start httpd.service#
启动Apache 服务
systemctl stop httpd.service#
停止Apache 服务
systemctl restart httpd.service#
停止Apache 服务
systemctl enable mariadb.service#
将MariaDB 服务设为开机启动
三、查看系统已有的Systemd 配置文件
Systemd 的配置文件都放置在/etc/systemd/system/目录下
典型常用的systemd 配置文件包含的三个单元
[Unit]#这个项目与此unit 的解释、执行服务相依性有关Description=OpenBSD Secure Shell server
Documentat ion=man:sshd(8) man:sshd_ config(5)After=network. target auditd. service
ConditionPathExists=!/etc/ssh/sshd_ not_ to_ be_ run
[Service] #这个项目与实际执行的指令参数有关EnvironmentFile=- -/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_ OPTSExecReload=/us r/sbin/sshd-tExecReload=/bin/kill -HUP $MAINPIDKillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Typе =notify
Runt imeDirectory=sshd
RuntimeDirectoryMode=0755
[Install] #込个項目説明此unit要挂載啣个target下面WantedBy=multi -user. target
Alias=sshd. Service
Systemd 的Unit 在Systemd 中,所有引导过程中Systemd 要控制的东西都是-个单元。基本的用法如下:
- Description :代表整个单元的描述,可根据需要任意填写。
- Wants :本单元启动了,它“想要"的单元也会被启动。但是这个单元若启动不成功,对本单元没有影响。
- Requires:这个单元启动了,那么它“需要"的单元也会被启动;它“需要”的单元被停止了,但是,这个设定并不能控制启动顺序,因为它“需要”的单元启动也需要时间,若它“需要”的单元启动还未完成,就开始启动本单元,则本单元也无法启动,所以不建议使用这个字段。
- OnFailure:若本单元启动失败了↓那么启动这个单元作为折衷。
- Before/After :指定启动顺序。
Systemd 的Service 服务本体,基本的用法如下:
- Type :服务的类型,各种类型的区别如下所示simple :默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休.
- forking :标准Unix Daemon 使用的启动方式。
启动程序后会调用fork0函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。
- oneshot :适用于那些被- -次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用RemainAfterExit=yes.即使没有进程存在, Systemd 也认为该服务启动成功了。
同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。
- dbus :这个程序启动时需要获取-块DBus空间,所以需要和BusName= -起用。只有它成功获得了DBus 空间,依赖它的程序才会被启动。
- ExecStart :在输入的命令是start 时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp.
- ExecStop :在输入的命令是stop时候执行的命令, 要求同上。ExecReload :这个不是必需,如果不写则service 就不支持restart 命令。ExecStart 和ExecStop 是必须要有的。
Systemd 的Install
服务编写完之后还需要被systemd 装载,定义安装单元各个字段如下:
- WantedBy :设置服务被谁装载,一般设置为multi-user.target
- Alias :为service 设置-个别名 ,可以使用多个名字来操作服务。
- Also : 在安装这个服务时候还需要的其他服务
四、编写一个简单的Systemd 配置文件
1.代码讲解
- Unit 部分
something 代表任何事物,任何内容,Wants 是服务启动成功时检查有遗漏启动,After 是指网络启动成功后执行
- Service 部分
type 这个命令的执行完成,退出也认为服务是正常的,以及配置这个remainafterexit,表示即使建成退出也表示可以继续运行,另外两个就是两个最核心的execstart 和execstop 表示在启动的时候会执行touch,tmp 目录。
- Install 部分
Wantby 表示服务挂载在multi-user.target