systemd记录

对于支持systemd的软件,通过rpm安装时,会自动在/usr/lib/systemd/system目录中添加一个相应的配置文件。
如果需要让软件开机时启动,以mysqld为例,执行:
[root@cisqjserver system]# systemctl enable mysqld
ln -s ‘/usr/lib/systemd/system/mysqld.service’ ‘/etc/systemd/system/multi-user.target.wants/mysqld.service’
此命令会在/etc/systemd/system/multi-user.target.wants目录中添加一个符号链接,指向/usr/lib/systemd/system中的mysqld.service。因为开机时systemd只执行/etc/systemd/system目录中的配置文件。
禁止开机启用时,就会删除上面创建的符号链接:
[root@cisqjserver system]# systemctl disable mysqld
rm ‘/etc/systemd/system/multi-user.target.wants/mysqld.service’

读懂systemd配置文件

还是以mysqld为例,其配置文件为(较新的版本可通过systemctl edit/cat来编辑与查看):
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
从以上配置可以看到,配置文件被分成3个区块,每个区块包含若干key-values对
1、[Unit]
表示启动顺序与依赖关系,其中:
Description:对当前服务进行简单描述
Documentation:给出文档位置
After:表示当前服务应该在After中的服务启动之后启动,如上,需要先启动network.target和syslog.target服务后再启动mysqld服务
Before:表示当前服务应该在Before中的服务启动之前启动,与After相反
Wants:表示当前服务与Wants中的服务存在弱依赖关系,即Wants中的服务启动失败或停止运行不影响当前服务继续执行
Requires:表示当前服务与Wants中的服务存在强依赖关系,即Wants中的服务启动失败或停止运行,则当前服务也会退出
注意:After和Before字段表示启动顺序,无依赖关系,Wants和Requires表示依赖关系,与启动顺序无关
2、[Service]
定义如何启动当前服务,其中:
ExecStart:定义启动服务时执行的命令
EnvironmentFile:指定当前服务的环境参数文件,注意以上配置文件中的"EnvironmentFile=-“中的”-"表示抑制错误,即发生错误时不影响其他命令的执行,上面配置表示即使/etc/sysconfig/mysql文件不存在,也不会抛出错误
ExecReload:重启服务时执行的命令
ExecStop:停止服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令
Type:定义启动类型,其值有:simple(默认,表示ExecStart字段启动的进程为主进程)、forking(表示ExecStart字段将以fork方式启动,此时父进程将会退出,子进程将成为主进程)、oneshort(类似simple,但只执行一次,systemd会等它执行完才执行其他服务)、dbus(类似simple,但会等待D-Bus信号后启动)、notify(类似simple,启动结束后会发出通知信号,然后systemd再启动其他服务)、idle(类似simple,但是要等到其他服务都执行完,才会启动该服务,一种使用场景是为让该服务的输出不与其他服务的输出相混合)
KillMode:定义systemd如何停止当前服务,其值有:control-group(默认,当前服务中的所有子进程都会被停止)、process(只停止主进程,不停止任何子进程)、mixed(主进程将收到SIGTERM信号,子进程收到SIGKILL信号)、none(没进程会被杀掉,只是执行服务的stop命令)
Restart:定义当前服务退出后,systemd的重启方式,其值有:no(默认,停止退出后不会重启)、on-success(只有正常退出时即退出状态码为0才会重启)、on-failure(非正常退出时才会重启,包括被信号终止和超时)、on-abnormal(只有被信号终止和超时才会重启)、on-abort(只有在收到没有捕捉到的信号终止时才会重启)、on-watchdog(超时退出才会重启)、always(不管什么退出原因,总是重启)。注意:对于守护进程,推荐设为on-failure,对于那些允许发生错误退出的服务,可设为on-abnormal。
RestartSec:表示systemd重启服务之前需要等待的秒数

3、[Install]
定义如何安装这个配置文件,即怎样做到开机启动
WantedBy:表示该服务所在的Target,Target表示服务组,即一组服务,如上配置为WantedBy=multi-user.target表示mysqld所在的Target是multi-user.target,因此上面执行systemctl enable mysqld命令时,创建的mysqld.service的符号链接会放在/etc/systemd/system目录中的mutil-user.target.wants子目录中
注意:systemd有默认的启动Target:
[root@cisqjserver ~]# systemctl get-default
multi-user.target
上面结果表示,默认的启动Target也是multi-user.target,在这个组中的所有服务,都会开机时启动,这就会systemctl enable可以开机启动服务的原因

systemctl常用命令

1、查看 multi-user.target 包含的所有服务
systemctl list-dependencies multi-user.target

2、切换到另一个target,如,切换至shutdown.target 表示关机状态
systemctl isolate shutdown.target

注意:Target也有自己的配置文件,但它的配置文件中没有启动命令

另外,修改或创建配置文件后,需要重新加载配置文件,然后重启相关服务:
3、重新加载配置文件
systemctl daemon-reload
4、重启相关服务
systemctl restart mysqld
5、启动服务
systemctl start mysqld
6、停止服务
systemctl stop mysqld
7、开机启动服务
systemctl enable mysqld
8、禁止开机启动服务
systemctl disable mysqld

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值