Centos的systemd

自从Centos7/Redhat7之后,system替换掉了传统上的SysVinit来管理系统服务。尽管现在系统中还依然保留着/etc/init.d目录,但更多的只是为了保证向前的兼容性而已。

相比SysVinit来说,systemd有不少优势,例如在服务启动的时候,系统采用的是并行方式而不是传统的串行;与/etc/init.d的对应的是/etc/systemd的目录下是各个服务的配置文件。我们下面就逐一介绍systemd的相关命令

systemd-analyze命令

获取系统启动过程耗费的时间
# systemd-analyze
Startup finished in 422ms (kernel) + 2.722s (initrd) + 9.674s (userspace) = 12.820s

获取每一个服务启动的具体时间——以启动后的秒数计算

# systemd-analyze blame
7.029s network.service
2.241s plymouth-start.service
1.293s kdump.service
1.156s plymouth-quit-wait.service
1.048s firewalld.service
632ms postfix.service
621ms tuned.service
460ms iprupdate.service
446ms iprinit.service
344ms accounts-daemon.service
...
7ms systemd-update-utmp-runlevel.service
5ms systemd-random-seed.service
5ms sys-kernel-config.mount

 

Journal命令

获取所有systemd服务的事件日志

# journalctl

你可以选择某一个服务的分类日志,比如:获取crond服务的日志。/sbin/crond是服务守护程序位置

# journalctl /sbin/crond

从上次启动之后的所有日志

# journalctl -b

列出今天所有的日志

# journalctl --since=today

根据syslog的优先级获取日志

# journalctl -p err

这个就不说了,就是一个tail -f调试时爆好用!

# journalctl -f

 

Cgroup相关

注:其实之前Litrin一直想要写一篇关于cgroup的东西,一直没有抽出时间来深入研究。想不到这次的systemd已经提前将cgroup集成进来了。

获取服务之前的cgroup关系

# systemd-cgls
├─user.slice
│ └─user-1000.slice
│ └─session-1.scope
│ ├─2889 gdm-session-worker [pam/gdm-password]
│ ├─2899 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2901 gnome-session --session gnome-classic
. .
└─iprupdate.service
└─785 /sbin/iprupdate --daemon

获得运行中服务cgroup的资源统计。

# systemd-cgtop
Path Tasks %CPU Memory Input/s Output/s
/ 213 3.9 829.7M - -
/system.slice 1 - - - -
/system.slice/ModemManager.service 1 - - - -

给某个服务“httpd.service”配置cgroup的cpu.shares到500(默认是1024)

# systemctl set-property httpd.service CPUShares=500

获得某个服务的CPU.Shares

# systemctl show -p CPUShares httpd.service

服务管理

启动时自动加载服务:ntpd

# systemctl enable ntpd

对应的其他管理,与之前的update.rc很接近

# systemctl disable ntpd
# systemctl start ntpd
# systemctl stop ntpd
# systemctl restart ntpd
# systemctl reload ntpd
# systemctl is-enabled ntpd
# systemctl is-active ntpd

获得服务的运行状态

# systemctl status ntpd
ntpd.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

PS:说的这么多,个人觉得systemd的管理方式更像是之前Solaris的服务管理模式了。cgroup的引入如果使用得当的话会大大避免以往服务进程之间资源争用的怪圈。

对于并发启动服务的模式,个人觉得在短时间内大家都很难接受这种设置。这种很高效的手法往往会让服务之间的依赖关系搞得很脆弱,让debug的方式变得更难。

推荐阅读:
去年的DCDC,我主要介绍了基
任何一个合理的应用程序的运行时
5月中旬,我参加了在加利福尼亚

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据