【技术指南】centos7下systemd服务管理全解
前言
systemd定义
systemd新特性
unit(单元)
①/etc/systemd/system 存放系统启动的默认级别及启动的unit的软连接,优先级最高。②/run/systemd/system,系统执行过程中产生的服务脚本,优先级次之。③/usr/lib/systemd/system 存放系统上所有的启动文件。优先级最低
[][][][][]
~]# systemctl status httpd.servicehttpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)Active: active (running) since 四 2019-04-18 22:09:06 CST; 1min 30s agoDocs: man:httpd(8)man:apachectl(8)Process: 8147 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)Main PID: 8136 (httpd)Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"CGroup: /system.slice/httpd.service/usr/sbin/httpd -DFOREGROUND/usr/sbin/httpd -DFOREGROUND/usr/sbin/httpd -DFOREGROUND/usr/sbin/httpd -DFOREGROUND/usr/sbin/httpd -DFOREGROUND/usr/sbin/httpd -DFOREGROUND18 22:09:06 bogon systemd[1]: Starting The Apache HTTP Server...18 22:09:06 bogon systemd[1]: Started The Apache HTTP Server.18 22:09:22 bogon systemd[1]: Reloading The Apache HTTP Server.18 22:09:22 bogon systemd[1]: Reloaded The Apache HTTP Server.
[]active[][][]
#设置httpd服务开机启动[root@bogon ~]# systemctl enable httpd.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.#禁止httpd服务开机启动[root@bogon ~]# systemctl disable httpd.serviceRemoved symlink /etc/systemd/system/multi-user.target.wants/httpd.service.#查看httpd服务能否开机启动[root@bogon ~]# systemctl is-enabled httpd.servicedisabled#禁止httpd服务设定为开机启动[root@bogon ~]# systemctl mask httpd.serviceCreated symlink from /etc/systemd/system/httpd.service to /dev/null.#取消禁止httpd服务开机启动[root@bogon ~]# systemctl unmask httpd.serviceRemoved symlink /etc/systemd/system/httpd.service.
(1)默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。(2)启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。(3)配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。
#级别间切换[root@bogon ~]# systemctl isolate runlevel3.target#查看级别[root@bogon ~]# systemctl list-units --type target#查看当前运行level[root@bogon ~]# who -r运行级别 3 2019-04-19 10:39#查看所有运行级别[root@bogon ~]# systemctl list-units --type target -all#获取默认运行级别[root@bogon ~]# systemctl get-defaultmulti-user.target#设定默认运行级别[root@bogon ~]# systemctl set-default graphical.targetRemoved symlink /etc/systemd/system/default.target.Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.#切换至紧急救援模式[root@bogon ~]# systemctl rescue#切换至emergency模式[root@bogon ~]# systemctl emergency
~]# vim /usr/lib/systemd/system/httpd.service1 [Unit]2 Description=The Apache HTTP Server3 After=network.target remote-fs.target nss-lookup.target4 Documentation=man:httpd(8)5 Documentation=man:apachectl(8)67 [Service]8 Type=notify9 EnvironmentFile=/etc/sysconfig/httpd10 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND11 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful12 ExecStop=/bin/kill -WINCH ${MAINPID}13 # We want systemd to give httpd some time to finish gracefully, but still want14 # it to kill httpd after TimeoutStopSec if something went wrong during the15 # graceful stop. Normally, Systemd sends SIGTERM signal right after the16 # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give17 # httpd time to finish.18 KillSignal=SIGCONT19 PrivateTmp=true2021 [Install]22 WantedBy=multi-user.target
unit常用选项:Description:描述信息,意义性描述After:定义unit的启动顺序。表示当前unit应该晚于哪些unit启动;其功能与before相反Requies:依赖到的其它的unit,强依赖,如果被依赖的unit无法启动时,那么该unit无法激活Wants:依赖到的其它的unit,弱依赖,如果被依赖的unit无法启动时,那么该unit也会正常激活Conflicts:定义units间的冲突关系
service字段的常用选项:Type:用于定义影响ExecStart及相关参数的额功能的unit进程启动类型;具有以下几个值:Type=simple:默认值,执行Execstart指定的命令, 启动主进程。Type=forking:以fork方式从父进程创建子进程,父进程在创建后立即退出Type=oneshot:一次性进程,systemd会等当前服务退出后,在进行往下执行Type=dbus:当前服务通过d-bus启动Type=notify:当前服务启动完毕,会告知systemd,继续往下执行Type=idle:若有其它服务执行完毕,当前服务才会执行ExecStart:启动当前服务的命令ExecStartPre:启动当前服务之前执行的命令ExecStartPost:启动当前服务之后执行的命令ExecReload:重启当前服务时执行的命令ExecStop:停止当前服务时执行的命令ExecStopPost:停止当前服务之后执行的命令RestartSec:自定义当前服务重启间隔的秒数Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdogTimeoutSec:定义systemd停止当前服务等待的秒数Environment:指定环境变量
WantedBy:它的值是一个或多个Target,当前unit激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中Alias:当前 Unit 可用于启动的别名Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
# systemctl daemon-reload 
#查看所有日志(默认情况只保留本次启动的日志)[root@bogon ~]# journalctl#查看内核日志(不包含应用日志)[root@bogon ~]# journalctl -k# 查看系统本次启动的日志$ sudo journalctl -b$ sudo journalctl -b -0# 查看上一次启动的日志(需更改设置)$ sudo journalctl -b -1# 查看指定时间的日志$ sudo journalctl --since="2012-10-30 18:17:16"$ sudo journalctl --since "20 min ago"$ sudo journalctl --since yesterday$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"$ sudo journalctl --since 09:00 --until "1 hour ago"# 显示尾部的最新10行日志$ sudo journalctl -n# 显示尾部指定行数的日志$ sudo journalctl -n 20# 实时滚动显示最新日志$ sudo journalctl -f# 查看指定服务的日志$ sudo journalctl /usr/lib/systemd/systemd# 查看指定进程的日志$ sudo journalctl _PID=1# 查看某个路径的脚本的日志$ sudo journalctl /usr/bin/bash# 查看指定用户的日志$ sudo journalctl _UID=33 --since today# 查看某个 Unit 的日志$ sudo journalctl -u nginx.service$ sudo journalctl -u nginx.service --since today# 实时滚动显示某个 Unit 的最新日志$ sudo journalctl -u nginx.service -f# 合并显示多个 Unit 的日志$ journalctl -u nginx.service -u php-fpm.service --since today# 查看指定优先级(及其以上级别)的日志,共有8级# 0: emerg# 1: alert# 2: crit# 3: err# 4: warning# 5: notice# 6: info# 7: debug$ sudo journalctl -p err -b# 日志默认分页输出,--no-pager 改为正常的标准输出$ sudo journalctl --no-pager# 以 JSON 格式(单行)输出$ sudo journalctl -b -u nginx.service -o json# 以 JSON 格式(多行)输出,可读性更好$ sudo journalctl -b -u nginx.serviceqq-o json-pretty# 显示日志占据的硬盘空间$ sudo journalctl --disk-usage# 指定日志文件占据的最大空间$ sudo journalctl --vacuum-size=1G# 指定日志文件保存多久$ sudo journalctl --vacuum-time=1years
[][][]
鉴于篇幅有限,更多详细课程大纲/知识体系/实体书籍/网工必备工具包等请扫码加群获取!
领取福利
