当前位置: 首页 > 科技观察

Linux使用Systemd来管理进程服务,重点~_0

时间:2023-03-17 19:57:04 科技观察

systemd介绍systemd作为Linux系统上主要的系统守护进程管理工具。一方面,init对进程进行串行管理,容易出现阻塞,另一方面,init只执行启动脚本,不能对服务本身进行更多的管理。所以从CentOS7开始,systemd已经取代init成为默认的系统进程管理工具。systemd管理的所有系统资源都称为Units,这些Units可以通过systemd命令集轻松管理。例如systemctl、hostnamectl、timedatectl、localctl等命令。虽然这些命令改写了init时代用户的命令使用习惯(不再使用chkconfig、service等命令),但确实提供了极大的便利。Systemd的特点最新的系统都由systemd管理(RedHat7、CentOS7、Ubuntu15...)。CentOS7支持服务并行启动,显着提高启动效率。CentOS7shutdown只关闭正在运行的服务,而CentOS6是一次全部关闭。CentOS7服务的启停不再由脚本管理,即/etc/init.d下没有脚本。CentOS7使用systemd解决了原有模式的缺陷,比如原有服务不会关闭程序生成的子进程。systemd语法systemctl[command][unit](配置的应用名称)command可选start:启动指定单元systemctlstartnginxstop:关闭指定单元systemctlstopnginxrestart:重启指定单元systemctlrestartnginxreload:重新加载指定单元systemctlreloadnginx·enable:开机时自动启动指定单元,前提是配置文件中有相关配置systemctlenablenginx·disable:启动时不自动运行指定单元systemctldisablenginx·status:查看指定unit的当前运行状态systemctlstatusnginxsystemd配置文件说明每个Unit都需要一个配置文件来告诉systemd如何管理服务。配置文件存放在/usr/lib/systemd/system/,启动配置后会在/etc/systemd/system目录下创建一个软链接文件。每个Unit的配置文件都配置了默认后缀.service。/usr/lib/systemd/system/目录分为两个目录:system和user。一般无需登录即可运行的程序存放在系统服务中,即/usr/lib/systemd/system。配置文件使用方括号分隔成多个部分,并且区分大小写。systemd相关文件实战1源码编译安装nginx实现systemd管理控制。安装nginx编译环境:yum-yinstallgccgcc-c++openssl-develpcre-develgd-develiproutenet-toolstelnetwgetcurlwgethttp://nginx.org/download/nginx-1.15.5.tar.gztarzxfnginx-1.15.5.tar.gz&&cdnginx-1.15.5./configure--prefix=/usr/local/nginx\--with-http_ssl_module\--with-http_stub_status_modulemake-j4&&makeinstall通用启动方式nginx:/usr/local/nginx/sbin/nginx#启动/usr/local/nginx/sbin/nginx-sreload#重启/usr/local/nginx/sbin/nginx-squit#关闭nginxsystemd管理控制启动方式:vim/usr/lib/systemd/system/nginx.service[Unit]Description=nginxAfter=network.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx-sreloadExecStop=/usr/local/nginx/sbin/nginx-squitPrivateTmp=true[Install]WantedBy=multi-user.target参数详解:systemctlrestartnginxsystemctlenablenginxsystemctlstopnginx实战二二进制安装tomcat实现systemd管理控制.安装java环境,我已经在我的服务器上打包了安装包,也可以去官网下载:wget120.78.77.38/file/jdk-8u231-linux-x64.rpmwget120.78.77.38/file/apache-tomcat-9.0。27.tar.gzrpm-ivhjdk-8u231-linux-x64.rpm#rpm直接安装jdk配置环境变量:vim/etc/profileexportJAVA_HOME=/usr/java/jdk1.8.0_231-amd64exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexportJAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/binexportPATH=${JAVA_HOME}/bin:$PATHsource/etc/profilejava-version#检测安装tomcat的环境:tar-xfapache-tomcat-9.0.27mvapache-tomcat-9.0.27/usr/local/tomcat启动tomcatsh/usr/local/tomcat/bin/startup.sh#启动sh/usr/local/tomcat/bin/shutdown.sh#关闭systemd管理控制启动:vim/usr/lib/systemd/system/tomcat.service[Unit]Description=tomcatserverWants=network-online.targetAfter=network.target[服务]Type=forkingEnvironment="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.shExecStop=/usr/local/tomcat/bin/shutdown.shRestart=on-failure[Install]WantedBy=multi-user.targetsystemctlrestarttomcat#启动systemctlenabletomcat#配置自启动systemctlstoptomcat#停止服务systemctlstatustomcat#检测状态以上两个实战nginx和tomcat程序来了with如果启动程序没有自己的脚本,需要自己写一个类似的启停脚本。部署jar程序实现systemd管理控制在实际项目中,会有一些jar程序需要启动。如果手动启动,需要输入a来停止一大串命令,需要kill进程才能停止。举个实际启动的例子很麻烦,切换到jar目录:java-jardecode.jar-Dconfig=/usr/local/abc/application.properties写一个启动脚本:vimdemo.sh#!/bin/bash#source/etc/profilejarName="abc-web.jar"workDir="/usr/local/abc"start(){cd${workDir}&&java-jar${jarName}--spring.profiles.active=prod--server.port=9630>uams.log2>&1&}stop(){ps-ef|grep-qP"(?<=-jar)\s+${jarName}"&&kill$(ps-ef|grep-P"(?<=-jar)\s+${jarName}"|awk'{print$2}')}case$1instart)start;;停止)停止;;restart)stopstart;;esacwritesystemd配置文件:vim/usr/lib/systemd/system/abc.service[Unit]Description=uamsserverWants=network-online.targetAfter=network.target[Service]Type=forkingWorkingDirectory=/usr/local/abc/ExecStart=/bin/bashuams.shstartExecStop=/bin/bashuams.shstopExecReload=/bin/bashuams.shrestartRestart=on-failure[Install]WantedBy=multi-user.target启动abcservice:systemctlrestartabc#启动systemctlenableabc#配置自启动systemctlstopabc#停止服务systemctlstatusabc#检测状态