linux service简介(init启动、systemd)
概念
简单地将,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庞大而复杂,对于一般的应用系统开发时,不应过度使用其功能特性,应使用其常见地功能子集。
推荐阅读
-
Linux系统Docker启动问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service"
-
用systemd-analyze分析Linux系统的启动性能
-
linux启动级别的含义(init 0-6)
-
Linux Simple Systemd Service Guide
-
详解Linux系统的systemd启动过程
-
Linux系统init级别设置错误导致系统不能正常启动怎么办?
-
linux的systemd与init的区别
-
linux service简介(init启动、systemd)
-
[置顶]【Linux init】systemd 服务单元管理
-
daemon 启动system V init 和 systemd 配置