做系统服务开发的工程师,通常需要把自己开发的服务部署到Linux服务器,同时还要保证服务器在宕机重启后,服务进程需要随机启动。
Systemctl是systemd工具集中的一款,主要负责控制systemd系统和服务管理器(在Linux系统中,经常看到这种工具设计方式,比如iptables、docker、openvswitch等,全部基于c/s模式实现)。
Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类Unix系统。
在Linux生态系统中,Systemd被部署到了大多数的标准LInux发行版中,只有少数的几个发行版尚未部署。特别是 生产环境中的Linux系统几乎全部默认支持systemd,所以学习使用systemd来管控新开发的服务一定事半功倍,同时也是项目成功的重要保障。
下面简要介绍Systemd的相关使用方法
-
检测系统是否已安装Systemd
# systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
-
检测Systemd是否运行
# ps aux | grep systemd
有类似如下打印,则说明systemd正在运行
root 1 0.3 0.1 191592 4520 ? Ss Dec14 7:54 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 699 0.7 0.5 56644 20916 ? Ss Dec14 15:47 /usr/lib/systemd/systemd-journald root 730 0.0 0.0 44864 1988 ? Ss Dec14 0:00 /usr/lib/systemd/systemd-udevd root 886 0.0 0.0 26384 1788 ? Ss Dec14 0:24 /usr/lib/systemd/systemd-logind dbus 897 0.0 0.0 58244 2460 ? Ss Dec14 1:52 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation epmd 2067 0.0 0.0 48908 1160 ? Ss Dec14 0:00 /usr/bin/epmd -systemd root 19287 0.0 0.0 112816 972 pts/0 S+ 22:37 0:00 grep --color=auto systemd
-
查询所有可用单元
systemctl list-unit-files
-
查询所有运行中单元
systemctl list-units
-
查询服务状态、启动、关闭、重启和重加载等,以keepalived为例
systemctl status keepalived systemctl start keepalived systemctl stop keepalived systemctl restart keepalived systemctl reload keepalived
-
查询服务是否激活态,以keepalived为例
systemctl is-active keepalived
OpenStack中neutron-server模块高可用组件HAProxy的判断方式就是采用此种方式。在keepalived检测脚本中使用如下命令:
systemctl is-active haproxy.service
-
开机自启动和禁止开机启动配置,以keepalived为例
systemctl enable keepalived systemctl disable keepalived
以上命令在生产中已基本够使用。如果需要详细了解systemctl的参数,可使用man进行查看。
systemd配置示例
-
编写测试脚本date.sh
#!/bin/bash echo $$ > /run/date.pid while true do echo `date` sleep 1 done
赋予脚本可执行权限
chmod +x date.sh
-
在/etc/systemd/system目录下编写systemd配置文件date.service
[Service] Type=simple PIDFile=/run/date.pid ExecStart=/home/kali/date.sh ExecStop=/bin/kill -9 $MAINPID RemainAfterExit=yes [Install] WantedBy=multi-user.target
其中,[Service]段中Type用于表明进程启动时的行为,默认是simple;PIDFile指明pid文件路径,与ExecStop配合使用,方便关闭进程;ExecStart启动当前服务的命令;[Install]包含了单元的启动信息,只有enable/disable指令会调用该部分内容。
如果服务启动比较耗时,建议Type=simple。
-
启动date服务
systemctl daemon-reload systemctl start date.servic e
-
查看date服务
systemctl status date.service
-
配置开机自启动,并重启服务器查看date服务是否自启动
systemctl enable date.service reboot
总结
在生产实践中,使用systemd管理服务生命周期是一个不错的选择。其配置简单,运行稳定,附带多种特性,基本能够满足我们对服务管理的所有需求。
如果对云计算感兴趣,可以关注我的微信公众号: