管理进程生命周期的好帮手-systemd

做系统服务开发的工程师,通常需要把自己开发的服务部署到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管理服务生命周期是一个不错的选择。其配置简单,运行稳定,附带多种特性,基本能够满足我们对服务管理的所有需求。

 

如果对云计算感兴趣,可以关注我的微信公众号:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值