在 CentOS 7 之前,系统以 System V 来作为系统管理器。 System V 有一个致命的缺点就是过度依赖于脚本来实现服务管理,从而导致服务几乎没办法并行启动,最终导致系统启动效率较为低下。 从 CentOS 7 开始,Systemd 成为新的系统管理器。我认为它最大的优点就是支持进服务并行启动,从而使效率大大提高;同时它还具有日志管理、快照备份与恢复、挂载点管理等多种实用功能,功能甩 System V 几条街! 而且 当然了 Systemd 是向下兼容 System V 的。 以下只介绍 Systemd 的服务、启动项和日志管理这三项功能,其他功能不涉及。 说明 二、服务、系统状态的查看2.1 查看系统所有安装的服务项systemctl list-unit-files --type=service 使用 2.2 查看系统所有运行的服务项systemctl list-units --type=service 如果看到某个服务项前面有一个红点,说明该服务存在问题,请进行排查。 使用 2.3 查看系统所有开机自启动的服务项systemctl list-unit-files --type=service | grep enabled 2.4 查看指定服务项状态systemctl status <服务项名称> 执行命令之后,系统会显示该服务项的状态、是否已激活、描述以及最后十条日志。 如果服务项前面有一个红点,说明该服务存在问题,请根据日志进行排查。 例如 查看 Nginx 服务状态 [root: ~]# systemctl status nginx.service● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: http:///en/docs/9月 05 09:24:07 CentOS_VM systemd[1]: nginx.service: control process exited, code=exited status=19月 05 09:24:07 CentOS_VM systemd[1]: Failed to start nginx - high performance web server.9月 05 09:24:07 CentOS_VM systemd[1]: Unit nginx.service entered failed state.9月 05 09:24:07 CentOS_VM systemd[1]: nginx.service failed.9月 05 09:28:39 CentOS_VM systemd[1]: Starting nginx - high performance web server...9月 05 09:28:39 CentOS_VM nginx[5566]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok9月 05 09:28:39 CentOS_VM nginx[5566]: nginx: configuration file /etc/nginx/nginx.conf test is successful9月 05 09:28:39 CentOS_VM systemd[1]: Started nginx - high performance web server.9月 05 09:28:49 CentOS_VM systemd[1]: Stopping nginx - high performance web server...9月 05 09:28:49 CentOS_VM systemd[1]: Stopped nginx - high performance web server. 2.5 查看服务项的依赖关系systemctl list-dependencies <服务项名称> 2.6 查看出错的服务systemctl list-units --type=service --state=failed 2.7 清除服务项的错误状态systemctl reset-failed <服务项名称> 2.8 查看系统启动耗时systemd-analyze 2.9 查看各项服务启动耗时systemd-analyze blame | grep .service 三、服务的管理3.1 启动服务systemctl start <服务项名称> 3.2 停止服务systemctl stop <服务项名称> 3.3 重启服务systemctl restart <服务项名称> 3.4 重新读取配置文件如果该服务不能重启,但又必须使用新的配置,这条命令会很有用。 systemctl reload <服务项名称> 3.5 使服务开机自启动systemctl enable <服务项名称> 3.6 使服务不要开机自启动systemctl disable <服务项名称> 3.7 禁用服务这可以防止服务被其他服务间接启动,也无法通过 start 或 restart 命令来启动服务。 systemctl mask <服务项名称> 3.8 启用服务仅针对于已禁用的服务。 systemctl unmask <服务项名称> 3.9 重新读取所有服务项修改、添加、删除服务项之后需要执行以下命令。 systemctl daemon-reload 四、简单服务文件的创建4.1 服务文件的位置我们自己建立的服务文件直接放在 如需修改软件包或系统自带的服务文件,请先将原版服务文件从 4.2 服务文件的模版以下是最简单的配置模版,直接根据提示或注释修改参数值,然后去掉所有注释即可。 [Unit]Description=<服务描述>After=<在哪个模块(服务)之后启动(可选)>[Service]Type=<simple|forking|oneshot>ExecStart=<程序或命令参数># 如果 "ExecStart=" 后面的程序或命令是在前台持续运行的,那么 "Type=" 后面应填写 "simple"。# 如果 "ExecStart=" 后面的程序或命令是在后台持续运行的,那么 "Type=" 后面应填写 "forking"。# 如果 "ExecStart=" 后面的程序或命令是在前台运行一下就退出的,那么 "Type=" 后面应填写 "oneshot"。ExecReload=<重新读取配置文件的命令(可选)>KillSignal=SIGTERMKillMode=mixed[Install]WantedBy=multi-user.target 说明 五、Target & Runlevel5.1 基本概念Systemd 中的 target 可以理解为系统的 “状态点”。 一个 启动了某个 Target 可以与传统的 Runlevel 相对应,它们的映射关系如下表: 需要注意的是,与 Runlevel 相对应的 Target 一定不能够同时启动。 当设置了某个服务自启动的时候,其实就是在往某个 target 的 .wants 目录中添加服务项的符号链接而已(默认添加到 表达能力真心有限…… 以下只介绍与 Runlevel 有关的命令。 5.2 查看系统默认的启动级别systemctl get-default 5.3 切换到某个启动级别systemctl isolate <启动级别对应的 target 名> 例如 切换到图形界面 [root: ~]# systemctl isolate graphical.target 5.4 设置系统默认的启动级别systemctl set-default <启动级别对应的 target 名> 六、日志管理6.1 开启日志持久化存储说明 去掉 保存配置文件之后重启一下日志记录服务即可。 systemctl restart systemd-journald.service 6.2 查看自从本次开机后所有的日志信息journalctl [-e] [-f]
当没有使用 6.3 查看特定 Unit (服务)所有的日志信息journalctl [-e] [-f] -u <Unit 名> 当没有使用 6.4 查看特定时间点内所有的日志信息journalctl --since="yyyy-MM-dd hh:mm:ss" --until="yyyy-MM-dd hh:mm:ss" 使用 例如 查看 [root: ~]# journalctl --since="2017-09-06 08:00:00" --until="2017-09-06 08:20:00" 6.5 查看日志当前占用的磁盘空间journalctl --disk-usage 6.6 修改日志最大占用的磁盘空间去掉 例如 修改日志最大占用的磁盘空间为 50M |
|