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支持并行启动服务,显着提高启动效率。CentOS7只关闭正在运行的服务,而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/系统目录下创建一个软链接文件。每个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.组织/下载/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#Start/usr/local/nginx/sbin/nginx-sreload#重启/usr/local/nginx/sbin/nginx-squit#关闭nginxsystemd管理控制启动方式vim/usr/lib/systemd/system/nginx.service[Unit]Description=nginxAfter=网络.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx-sreloadExecStop=/usr/local/nginx/sbin/nginx-squitPrivateTmp=true[安装]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#rpminstalljdk直接配置环境变量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#检测环境安装tomcattar-xfapache-tomcat-9.0.27mvapache-tomcat-9.0.27/usr/local/tomcatstarttomcatsh/usr/local/tomcat/bin/startup.sh#startsh/usr/local/tomcat/bin/shutdown.sh#关闭systemd管理控制,启动vim/usr/lib/systemd/system/tomcat.service[Unit]Description=tomcatserverWants=network-online.targetAfter=network.target[Service]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#Detectstatus以上两个实战的nginx和tomcat程序都有自己的启停脚本。如果启动程序没有自己的脚本,需要自己写一个类似的启停脚本。实战三、部署jar程序实现systemd管理控制实际项目中会有一些jar程序需要启动。如果手动启动,则需要输入一系列命令才能停止。您需要终止进程才能停止。举个实际启动的例子很麻烦。切换到jar目录java-jardecode.jar-Dconfig=/usr/local/abc/application.properties编写启动脚本vimdemo.sh#!/bin/bash#source/etc/profilejarName="abc-web.jar"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启动abcservicesystemctlrestartabc#startsystemctlenableabc#configureself-startsystemctlstopabc#停止服务systemctlstatusabc#检测状态点击“阅读原文”,获得更好的阅读体验!
