1. 使用systemctl来管理服务的启动/开机启动/状态观察
systemctl [command] [unit]
command 主要有:
- start : 立刻启动后面接的unit
- stop : 关闭
- restart : 重启
- reload : 不关闭后面接的unit的情况下,重载配置文件,让设定生效
- enable : 设定开机自启
- disable : 设定开机不自动启动
- status: 返回该unit的状态,会列出正在执行,开机预设执行否,登录等信息等
- 第三行常见状态:
- active(running) : 正有一只或多只程序正在系统中执行,比如vsftpd
- active(exited) :仅执行一次就正常结束的服务,目前没有任何程序在系统中执行,比如:开机挂载是才会执行一次的quotaon功能
- active(waiting) :正在执行当中,不过还在等待其他事件才能继续处理
- inactive : 这个服务没有运作
- is-active : 目前有没有正在运作中
- is-enable : 开机有没有预设要启动这个unit
**注意:**不要使用kill的方式来关闭服务,否则会造成systemd无法继续监控该服务
2. 打印服务举例:
与打印有关的有三个服务,分别是cups.service,cups.soket,sups,path,首先我们来查看他们的状态:
然后我们使用systemctl stop cups.service来关闭该服务
尝试使用lp这个指令来打印
再来查看那三个服务的状态
嗯?我们不是将cups.service关闭了吗?怎么会是开启的状态了?这其实就是服务之间的相依性,虽然我们把cups.service关闭了,但我们没有关闭另外两个相关的服务,当我们使用打印时,systemd就会自动启动cups.service
3. 服务的注销
- systemctl mask unit, 如前面我们说的cups的服务,我们就可以注销cups.service的服务(这个注销动作就是让启动的脚本连结到/dev/null变成空的装置),这样其他两个任务再怎么都不可能可以让cups.service相依启动
- systemctl unmask unit,取消注销
4. 观察系统上所有服务
systemctl [command] [–type=TYPE] [–all] 注意:是两根短横线!
comand :
list-units : 依据unit列出目前启动的unit,如加上–all才会将没启动的也列出
list-unit-files : 依据/usr/bin/systemd/system/内的文件,将所有文件列表说明
–type=TYPE : 就是之前提到的unit type, 主要有service ,socket ,target等
5. 透过systemctl管理不同的操作环境(target unit)
systemctl list-units --type=target --all ,列出所有与操作界面有关的target项目
主要的有:
graphical.target : 就是文字加上图形界面
multi-user.target : 纯文字模式,就是只给你一个终端,没有图形窗口
rescue.target : 无法使用root登入时,systemd在开机时多加一个额外的暂时系统,与原来的系统无关。这时你可已取得root权限来维护你的系统
emergency.target : 紧急处理系统的错误,还是需要使用root登入的情况,在无法使用rescue.target时,可尝试这种模式
shutdown.target :就是关机的流程
getty.target : 可以设定你需要的几个tty之类的
正常的模式:multi-user.target,graphical.target
救援模式:rescue.target,emergency.target
systemctl [command] [unit.target] ,操作模式的观察和设定
command:
get-default :取得目前的target
set-default :设定后面接的target成为默认的操作模式
isolate : 切换到后面接的模式,就可以切换到上面提到的那6种模式
注意:target请使用isolate来切换,使用start/stop/restart会出现问题,但systemd也提供了数个简单的指令给我们
systemctl poweroff ,关机,也可以直接用poweroff
systemctl reboot ,重启,也可以直接用reboot
systemctl suspend , 进入暂停模式
该模式将系统的状态数据保存在内存中,然后关闭大部分的系统硬件,并没有关闭计算机。等待用户按下唤醒机器的按钮后,才会将数据回复,然后重新驱动大部分硬件,唤醒较快
systemctl hibernate , 进入休眠模式
与暂停模式不同的是,该模式将数据保存在硬盘中,保存完毕后,将计算机关机。所以唤醒较慢
systemctl rescue , 强制进入救援模式
systemctl emergency ,强制进入紧急救援模式
6. 分析各服务之间的相依性
systemctl list-dependencies [unit] [–reverse]
这个家伙就有点像pstree
–reverse: 反向追踪谁使用这个unit
7. 与systemd的deamon运作过程相关的目录
- /usr/lib/systemd/system/ : 使用centos官方提供的软件安装后,默认的气筒脚本配置文件都放在这里,尽量不要修改
- /run/systemd/system/ : 系统执行过程中产生的服务脚本
- /etc/systemd/system/ : 可以放置管理员依据自己服务器的需要建立的执行脚本
- /etc/sysconfig/* : 几乎所有的服务都会将初始化的一些选项设定写入到这个目录下
- /var/lib/ : 一些会产生数据的服务都会将他的数据写入到/var/lib/目录下
- /run/ : 放置好多daemon的暂存档,包括lock file以及PID file等等
8. 关闭网络服务
- 网络端口配置文件(不要修改,有时候会出现协议错误!):/etc/services
- 追踪网络服务 :netstat -tlunp
9. systemctl 针对service类型的配置文件
systemctl 配置文件相关目录简介(以vsftpd.service服务来介绍)
- /usr/lib/systemd/system/vsftpd.service : 官方释出的预设配置文件
- /etc/systemd/system/vsftp.service.d/custom.conf : 在/etc/systemd/system底下建立与配置文件相同文件名的目录,但要加上.d的扩展名,然后在该目录下建立配置文件即可,加上.conf最好
- /etc/systemd/system/vsftpd.service.wants/* : 此目录为文件的链接档,设定相依的连结。表示在该服务启动后,最好在加上这个目录底下建议的服务
- /etc/systemd/system/vsftpd.service.requires/* : 与上一个类似,不同的是该文件配置文件表示在启动该服务之前需要事先启动的服务
- systemctl 配置文件的设定项目简介
终端输入:cat /usr/lib/systemd/system/sshd.service
分析上面的文件:
- [Unit] : unit本身的设定说明,以及与其相依的daemon的设定
[Service],[Socket],[Timer],[Mount]… : 不同的unit type就的要使用相对应的设定项目
Type:
- simple : 默认值,这个daemon主要由上面说的ExecStart接的指令串来启动,启动后常驻于内存
- forking : 由ExecStart启动的程序透过spawns延伸出其他子程序作为此daemon的主要服务。相当于父程序以另一种方式活着
- oneshot : 与simple类似,不过这个程序执行一次就无了,比如挂载,文件系统的检查
- dbus : 与simple类似,但这个daemon必须要去的一个D-Bus的名称后才会继续运作,因此设定这个项目时,通常也要设定BusName= 才行
- idle : 与simple类似,要执行这个daemon必须要所
- 有的工作都顺利执行完毕后才会执行,这类的daemon通常是开机到最后才执行即可的服务
- [install] : 这个项目就是将此unit安装到哪个target里面去
设定参数 | 意义 |
WantedBy | 这个设定后面接的大部分是*.target unit,表示该服务附在哪一个target unit底下的,一般都在muli-user.target底下 |
Also | 当目前这个unit被enable时,Also后面接的unit也要enable |
Alias | 进行一个连结的别名 |
说明:
- 设定项目是可以重复的,但后面的会覆盖前面的,比如我们想要让After归零,就可以在[Unit]后面添加After=
- 如果设定参数需要是boolean,那么:1,yes,true,on表示启动,0,no,false,off代表关闭
- 空白行,开头为#或;的那一行,都代表注释
10. systemctl 针对timer的配置文件
- 相比crond,使用timer.target的优势:
- 由于systemd的服务产生的信息都会记录,因此比crond的debug上面清楚的多
- 可以和其他服务合作,相依性
- 各项timer的工作可以跟control group(cgroup,用来取代/etc/secure/limit.conf)结合,来限制各项工作的资源
要使用systemd的timer的功能,我们不仅需要该服务开启,还需要一个sname.timer(放在/etc/systemd/system/下就好了)r的时间启动服务存在,其设定值如下:
设定参数 | 意义 |
OnActiveSec | 当timer.target启动多久后才执行这个unit |
OnBootSec | 当开机多久后才执行 |
OnStartupSec | 当systemd第一次启动之后过多久才执行 |
OnUnitActiveSec | 管理的那个unit服务在最后一次启动后隔多久再执行一次 |
OnUnitInactiveSec | 管理的那个unit服务在最后一次停止后隔多久再执行一次 |
OnCalendar | 使用实际时间的方式来启动服务 |
Unit | 当你的服务启动文件sname.server与sname.timer的sname不同就需要设定该配置了 |
Persistent | 当使用OnCalendar的设定时,指定该功能要不要持续进行 |
- 时间格式
1. 语法:英文周名 YYYY-MM-DD HH:MM:SS 2. 也可以直接使用间隔时间 us : 微秒 ms:毫秒 s,sec,second,seconds m,min,minute,minutes h,hr,hour,hours d,day,days w,week,weeks mouth,mouths y,year,years 3. 使用英语的口语化日期 now today tomorrow hourly daily weekly monthly +3h10m
- 重载配置文件:systemctl daemon-reload,常在修改或增加了服务配置文件后使用