systemd服务管理

目录

 

1、含义

2、服务单元的主要分类:

2.1、有一般服务有关的:.service

2.2、与开机启动有关的:.target

2.3、套接字单元的:.socket

3、单元配置文件

4、常用命令

5、注册用户服务(centos7不适用)

6、其他


 

1、含义

systemd这个只有一个管理工具:systemctl

systemctl管理服务的时候,需要去读取一个单元配置文件,根据单元配置文件的定义去启动和管理相对应的进程。

  1. RHEL7之前 —— service/init
  2. RHEL7之后 —— /usr/bin/systemctl

2、服务单元的主要分类:

systemd:需要对我们的系统服务进行分类(/usr/lib/systemd/system)

tips:当使用systemctl enable XX.service 命令将服务设置为开机启动时,

会在/etc/systemd/system/目录下创建对应的符号链接

2.1、有一般服务有关的:.service

例如httpd samba nfs dns dhcp等

.service:以 .service 结尾的就是和一般服务有关的。

391f6266f9e348839a70cf234973bb24.png

2.2、与开机启动有关的:.target

f995b9ef7fb142ae9e86b3e282ee7e00.png

 

2.3、套接字单元的:.socket

a088eed8f926412fa75b0039146ebb71.png

 

 

不管是什么样类型单元的都一定会有一个单元配置文件。

systemctl -t help

b8da14d07b06401cad74ceb7c0b4261e.png

 

3、单元配置文件

注意:systemd的管理工具systemctl仅认单元配置文件。

只要你提供了一个可用的单元配置文件,那么就能通过systemctl来管理,也就可以通过定义单元配置文件来定义服务。

例如,nginx自己定义nginx的单元配置文件,你就能通过systemctl来管理nginx。

 

# vi /usr/lib/systemd/system/nginx.service


 

[Unit]

Description= The Nginx HTTP Server daemon

Before=network.target


[Service]

EnvironmentFile=/usr/local/nginx/conf/nginx.conf

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/bin/kill -QUIT $MAINPID

# MAINPID是服务的systemd变量,它指向主应用程序的PID

ExecStop=/bin/kill -HUP $MAINPID

Type=forking

#Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking


[Install]

WantedBy=  multi-user.target

 

 

 

 

3.1定义控制单元 [Unit]

在 Systemd 中,所有引导过程中 Systemd 要控制的东西都是一个单元。基本的用法如下:

  1. Description:代表整个单元的描述,可根据需要任意填写。
  2. Wants:本单元启动了,它“想要”的单元也会被启动。但是这个单元若启动不成功,对本单元没有影响。
  3. Requires: 这个单元启动了,那么它“需要”的单元也会被启动; 它“需要”的单元被停止了,它自己也活不了。但是请注意,这个设定并不能控制启动顺序,因为它“需要”的单元启动也需要时间,若它“需要”的单元启动还未完成,就开始启动本单元,则本单元也无法启动,所以不建议使用这个字段。
  4. OnFailure:若本单元启动失败了,那么启动这个单元作为折衷。
  5. Before/After:指定启动顺序。

 

 

 

3.2、 定义服务本体 [service]

在定义完了 Systemd 用来识别服务的单元后,我们来定义服务本体。基本的用法如下:

  • Type:服务的类型,各种类型的区别如下所示
    • simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。
    • forking:标准 Unix Daemon 使用的启动方式。启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。
    • oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用 RemainAfterExit=yes。意思是说,即使没有进程存在,Systemd 也认为该服务启动成功了。同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。
    • dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。
  • ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。
  • ExecStop:在输入的命令是stop时候执行的命令,要求同上。
  • ExecReload:这个不是必需,如果不写则你的service就不支持restart命令。ExecStart和ExecStop是必须要有的。

若想指定非root用户执行此system文件,则加入参数

User=

Group=

3.3、安装服务 [install]

服务编写完之后还需要被systemd装载,定义安装单元各个字段如下:

  1. WantedBy:设置服务被谁装载,一般设置为multi-user.target
  2. Alias:为service设置一个别名,可以使用多个名字来操作服务。
  3. Also:在安装这个服务时候还需要的其他服务

 

 

 

 

 

4、常用命令

# systemctl start/stop/restart/reload/status/enable/disable/is-enabled/is-disabled/mask/unmask xxx.service

 

列出所有启动unit

# systemctl list-units

 

查看当前运行级别target(mult-user)启动了哪些服务

# systemctl list-dependencies

 

设置为开机自动激活单元并现在立刻启动

# systemctl enable --now

 

功能描述:查看服务开机启动状态

# systemctl list-unit-files

 

 

f91aeef0ce6a4bfa8d35c0bdd3ebb780.png

 

29b70719df4443d1b24cfeb061bf7531.png

 

44a63b863e204fd9b4d45b7395e19c2b.png

 

5、注册用户服务(centos7不适用)

 

1、创建一个目录

# 用户家目录/.config/systemd/user

 

2、在此目录下编写system 文件

 

3、重新加载配置并启动服务

# systemctl --test daemon-reload

 

遇到以下错误

1、

d38a4f6b57fc47dd925473889e5f93fc.png

解决办法:

# yum install dbus-x11 dbus -y

# eval `dbus-launch --sh-syntax`

 

dbus 是用于进程间的通信

 

2、

3374ea0d695941719c55ed197a3c1a28.png

 

 

# systemctl --test enable --now 服务名

 

# systemctl --test status 服务名

 

6、其他

  1. 如果指定某个服务在开机时启动,系统就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/XXX.service 文件的链接。

 

  1. systemd有系统和用户的区分;系统(/usr/lib/systemd/system/)、用户

(/usr/lib/systemd/user/)。一般系统管理员手工创建的单元文件建议存放在/usr/lib/systemd/user/目录下面。

 

3.如果要开机启动时执行命令或服务,那我们将其写在/etc/rc.local(或者 /etc/rc.d/rc.local)文件中。

2646cf4e4c3d46d1845e1048076edd7c.png

f64390c52e8e40cbba216ef743c6f1b2.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值