Linux systemd学习

Systemd

 附带一个我自己写的systemmd文件,教程里面的有点问题,涉及到命令必须要提供绝对地址下的执行文件,

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Write Something
Wants=network-online.target
After=netowrk.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/touch /tmp/testfile
ExecStop=
[Install]
WantedBy=multi-user.target

  

 

内容简介

一、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/目录下

image.png

典型常用的systemd 配置文件包含的三个单元

[Unit]#这个项目与此unit 的解释、执行服务相依性有关Description=OpenBSD Secure Shell serverDocumentat 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 配置文件

image.png

1.代码讲解

image.png

  • Unit 部分

something 代表任何事物,任何内容,Wants 是服务启动成功时检查有遗漏启动,After 是指网络启动成功后执行

  • Service 部分

type 这个命令的执行完成,退出也认为服务是正常的,以及配置这个remainafterexit,表示即使建成退出也表示可以继续运行,另外两个就是两个最核心的execstart 和execstop 表示在启动的时候会执行touch,tmp 目录。

  • Install 部分

Wantby 表示服务挂载在multi-user.target

 

posted @   woodx  阅读(330)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示