欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux service简介(init启动、systemd)

程序员文章站 2022-07-14 13:31:43
...

概念

简单地将,linux系统中的service是系统服务管理的工具,包含启动、重启、关闭指定服务。


历史

service发展经历了两次大的变化。早期作为调用位于/etc/init.d/目录下的脚本,可以称为传统service管理方式;目前,更多地作为systemd的入口。下面展开讲一下:
* 1) 早期,service作为’run a System V init script’,仅仅是调用/etc/init.d/目录下的脚本,比如service test.sh start命令的操作为:调用脚本/etc/init.d/test.sh并把参数start传递给test.sh脚本。
* 2)当前,service作为systemd入口,是systemctl命令的封装。

注意:目前大多数发行版linux以systemd作为service管理的底层,当然你完全可以使用systemctl命令来管理服务


传统service管理方式

添加服务

编写脚本,并把脚本放置于/etc/init.d/目录下,并赋予执行权限,即完成一个服务的添加。

  • 编制脚本
# 文件名: test.sh
case $1 in
  start)
    echo "start the service"
    # 执行你的服务程序
    ;;  
  stop)
    echo "stop the service"
    # 停止你的服务程序
    ;;  
  status)
    echo "check status of the service"
    # 获取服务程序的状态
    ;;  
  *)  
    echo "error parameter"
    exit 1
    ;;  
esac

exit 0
  • 赋予执行权限:chmod +x /etc/init.d/test.sh
  • 启动服务:service test.sh start
  • 停止服务:service test.sh stop

注意:由于目前大多Linux发行版本的service管理默认采用systemd,因而如上启动&停止服务的方式已经无效,在这种系统上,可采用如下方式启动、停止服务:

/etc/init.d/test.sh start #启动服务
/etc/init.d/test.sh stop #停止服务

另外,如果需要开启自启动,请用命令chkconfig


基于systemd的service管理方式

为什么要用systemd

谈到为什么要用systemd,得说传统方式的缺点:
* 启动时间长:串行启动,即只有前一个进程启动完,才会启动下一个进程
* 启动脚本复杂:传统方式只是调用一下脚本,不管其他事情,因而需要自己处理各种情况,这使得脚本长而复杂。
systemd出现的目的就是解决传统方式的缺点,为系统的启动和管理提供一套完整的解决方案。

功能概述

  • systemd是一个非常庞大而复杂的系统,本文主要讲述比较常见的两个用途:系统管理与服务管理。
  • systemctl是Systemd的主命令,例如可用命令sudo systemctl reboot实现系统重启。
  • Systemd 可以管理所有系统资源(比如,系统服务、硬件、文件或路径等12种),不同的资源统称为 Unit。每个Unit都有相应的配置文件,用于描述相应的Unit。另外,有systemctl list-unit-files等工具可查看Unit配置文件列表
  • Target用于解决一次启动多个Unit的问题
  • 日志:Systemd 统一管理所有 Unit 的启动日志,可用journalctl查看日志,例如通过命令sudo journalctl -u test1.service -u test2.service --since today查看test1与test2服务今天的日志。【注:journalctl功能强大,有许多用途请参考相应文档】

:systemd庞大而复杂,对于一般的应用系统开发时,不应过度使用其功能特性,应使用其常见地功能子集。