最简明的systemd进程管理教程,搞懂只需10分钟~(代码片段)

果子哥丶 果子哥丶     2023-01-28     629

关键词:

systemd 介绍

systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理 。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具。
systemd所管理的所有系统资源都称作Unit,通过systemd命令集可以方便的对这些Unit进行管理。比如systemctl、hostnamectl、timedatectl、localctl等命令,这些命令虽然改写了init时代用户的命令使用习惯(不再使用chkconfig、service等命令),但确实也提供了很大的便捷性。

systemd 特点

  • 最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15…)
  • CentOS7 支持开机并行启动服务,显著提高开机启动效率
  • CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
  • CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不在有脚本。
  • CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

systemd 语法

systemctl [command]      [unit](配置的应用名称)

command可选项
· start:启动指定的unit          systemctl start nginx
· stop:关闭指定的unit           systemctl stop nginx
· restart:重启指定unit          systemctl restart nginx
· reload:重载指定unit           systemctl reload nginx
· enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置 systemctl enable nginx
· disable:开机时不自动运行指定unit   systemctl disable nginx
· status:查看指定unit当前运行状态 systemctl status nginx

systemd 配置文件说明

  • 每一个 Unit 都需要有一个配置文件用于告知 systemd 对于服务的管理方式
  • 配置文件存放于 /usr/lib/systemd/system/,设置开机启动后会在 /etc/systemd/system 目录建立软链接文件
  • 每个Unit的配置文件配置默认后缀名为.service
  • 在 /usr/lib/systemd/system/ 目录中分为 system 和 user 两个目录,一般将开机不登陆就能运行的程序存在系统服务里,也就是 /usr/lib/systemd/system
  • 配置文件使用方括号分成了多个部分,并且区分大小写

systemd 相关文件

实战一 源码编译安装nginx 实现systemd管理控制

安装nginx编译环境

yum  -y install gcc gcc-c++    openssl-devel pcre-devel gd-devel  iproute net-tools telnet wget curl
wget http://nginx.org/download/nginx-1.15.5.tar.gz
tar zxf nginx-1.15.5.tar.gz &&
cd nginx-1.15.5
./configure --prefix=/usr/local/nginx \\
    --with-http_ssl_module \\
    --with-http_stub_status_module 
make -j 4 && make install

通用方式启动nginx

/usr/local/nginx/sbin/nginx  #启动
/usr/local/nginx/sbin/nginx  -s reload  #重启
/usr/local/nginx/sbin/nginx -s   quit   #关闭nginx

systemd 管理控制启动模式

vim      /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

参数详解

systemctl restart nginx
systemctl enable  nginx
systemctl stop  nginx

实战二 二进制安装tomcat 实现systemd管理控制

安装java环境,我已经将安装包打包到我得服务器上,也可以去官网下


wget  120.78.77.38/file/jdk-8u231-linux-x64.rpm
wget  120.78.77.38/file/apache-tomcat-9.0.27.tar.gz
rpm -ivh  jdk-8u231-linux-x64.rpm    #rpm直接安装jdk

配置环境变量

vim    /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
export JRE_HOME=$JAVA_HOME/jre  
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib  
export JAVA_PATH=$JAVA_HOME/bin:$JRE_HOME/bin
export  PATH=$JAVA_HOME/bin:$PATH 
source   /etc/profile
java -version   #检测环境

安装tomcat


tar  -xf  apache-tomcat-9.0.27  
mv  apache-tomcat-9.0.27  /usr/local/tomcat
启动tomcat
sh    /usr/local/tomcat/bin/startup.sh   #启动
sh   /usr/local/tomcat/bin/shutdown.sh #关闭

systemd管理控制启动

vim      /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_231-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl restart tomcat  #启动
systemctl enable tomcat   #配置自启
systemctl stop  tomcat   #停止服务
systemctl status  tomcat  #检测状态

以上两个实战nginx和tomcat程序中自带了启动停止脚本,如果启动得程序没有自带脚本则需要自己编写一个类似得启动停止脚本

实战三 部署jar程序 实现systemd管理控制

实际得项目中会有一些jar程序需要启动 如果手动启动则需要输入一大串命令 停止则需要杀掉进程来停止,很麻烦

举一个实际启动得例子切换到jar目录下

java -jar decode.jar -Dconfig=/usr/local/abc/application.properties

编写一个启动脚本 vim demo.sh

#!/bin/bash

source /etc/profile
jarName="abc-web.jar"
workDir="/usr/local/abc"

start()
    cd $workDir && java -jar $jarName --spring.profiles.active=prod --server.port=9630 >uams.log 2>&1 &


stop()
    ps -ef | grep -qP "(?<=-jar)\\s+$jarName" && kill $(ps -ef | grep -P "(?<=-jar)\\s+$jarName" | awk 'print $2')


case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
esac

编写 systemd 配置文件

vim  /usr/lib/systemd/system/abc.service

[Unit]
Description=uams server
Wants=network-online.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/usr/local/abc/
ExecStart=/bin/bash uams.sh start
ExecStop=/bin/bash uams.sh stop
ExecReload=/bin/bash uams.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动abc服务

systemctl restart abc  #启动
systemctl enable abc   #配置自启
systemctl stop  abc   #停止服务
systemctl status  abc  #检测状态

systemctl命令详解及使用教程(代码片段)

在本教程中,我们将向您介绍在运行systemd的linux系统上如何使用systemctl命令工具有效的控制系统和服务.Systemctl介绍Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的... 查看详情

systemd入门教程:命令篇

原文连接:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html ??Systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。 本文介绍它的基本用法,分为上下两篇。今天介绍它的主要命令,下一篇介绍如何... 查看详情

systemd管理

...机流程分析》中讲述在用户层阶段有对进程管理的工具有systemd和init两种。在CentOS5,6上面使用init作为进程管理的工具,在CentOS7上面使用sytemd对进程进行管理,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。... 查看详情

如何查看linux服务器运行状态

...动等,大多数最新的Linux发行版在使用相同的进程管理器-systemd。systemd是Linux系统和服务管理器init进程的一个替代品,它与SysV和LSBinit脚本兼容,systemctl命令是管理systemd的主要工具。systemd的组件systemd的组件在本教程中,我们将... 查看详情

用systemd管理进程

...用脚本一次性启用如下:我们同样用脚本一次性启动用了systemd管理进程我们就不用担心机器重启,或者进程挂掉这种情况发生了,他会自动帮我们重新启动。对于一些隔一段时间运行的进程,也可以通过systemd很好的解决。 查看详情

harbor进程组件化运行及systemd进程日志分写

目标   由于公司容器化上生产后,需要规范发布流程,而作为容器的基础服务harbor镜像仓库,通过自己来发布自己不太理,于是将镜像方式的harbor组件变更为进程方式发布。由于已经上线较长时间,各系统的配置诸如... 查看详情

一文搞懂supervisor进程管理

参考技术A使用Python编写的进程管理程序supervisor来管理Python程序那是最合适不过了,supervisor基于CS架构,主要有以下两个组成部分:基于ubuntu16.04,不同linux发行版均可使用包管理器进行安装,也可以使用源码安装和pip安装pip安装... 查看详情

systemd

一、Systemd简介1、Systemd是一个新兴的系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程。systemd由红帽公司开发,用以代替Upstart,“系统的第一个进程init”。2、Systemd的新特性... 查看详情

systemd管理示例

Systemd简介: Systemd是系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。首先简单了解一下centos的启动流程;POST-->BootSequence-->Bootloader-->kernel+initramfs(initrd)-->rootfs--&g... 查看详情

linux里面systemd是啥?

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。启动及服务大多数主流发行版要么已经... 查看详情

操作系统systemctl命令

...systemctldaemon-reload子命令总结笔者在前文中概要的介绍了systemd的基本概念和主要特点。由于systemd相关的绝大多数任务都是通过systemctl命令管理的,所以本文将集中的介绍systemctl命令的用法。注意,本文以ubuntu16.04进行介绍,文中... 查看详情

centos7进程管理systemd详解

...们在之前的文章中也做出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一起探讨一些关于CentOS7上的systemd的新特性的内容。具体分为一下几个方面:1、systemd新特性简介2、systemd如何管理... 查看详情

jabref文献管理软件简明教程

JabRef文献管理软件简明教程 大多只有使用LaTeX撰写科技论文的研究人员才能完全领略到JabRef的妙不可言,但随着对Word写作平台上BibTeX4Word插件的开发和便利应用,使用Word撰写文章且用JabRef推送参考文献同样令人十分愉悦。作... 查看详情

saltstack简明教程

第1章SaltStack简明教程1.1SaltStack简介SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWSEC2实例),它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。... 查看详情

systemctl命令完全指南

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。在Linux生态系统中,Systemd被部署到了大... 查看详情

systemctl命令完全指南

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。在Linux生态系统中,Systemd被部署到了大... 查看详情

[架构之路-33]:目标系统-系统软件-linuxos用户空间程序的启动关闭监管--systemd进程与作用架构(cloud进程管理工具)(代码片段)

目录第1章SystemD概述1.1SystemD在Linux系统中的位置1.2概述1.3 SystemD的特点第2章 SystemD进程自身的架构第3章 SystemD主要的分层组件3.1LinuxKernel3.2systemdlibraries3.3systemdcore3.4systemdDaemons3.5systemdTargets3.6systemdutilities第4章常见的Sys 查看详情

systemd

...到Damon的目的   最近的一些linuxdistribution开始采用systemd作为sysvinit和upstart的替代,如果我们想让自己的程序(服务)被systemd管理,则编写守护进程则要遵循一些systemd下的规则了.. 查看详情