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

Systemd进程管理教程一目了然的

时间:2023-03-13 20:11:16 科技观察

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](配置的应用程序名称)命令选项start:启动指定的unitsystemctlstartnginxstop:关闭指定的unitsystemctlstopnginxrestart:重启指定的unitsystemctlrestartnginxreload:重新加载指定的unitsystemctlreloadnginxenable:系统启动systemctldisablenginxdisable:不运行指定的unitunitsystemd启动时自动启动ctldisablenginxstatus:查看指定unit的当前运行状态开机后会在/etc/systemd/system目录下创建文件。/usr/lib/systemd/system/目录分为两个目录:system和user。一般无需登录即可运行的程序存放在系统服务中,即/usr/lib/systemd/system配置文件的user括号内分为多个部分,区分大小写的是Systemd相关文件实战1源码编译安装nginx实现systemd管理控制安装nginx编译环境。更多Nginx安装请参考:《Nginx系列教程(一)| 手把手教你在Linux环境下搭建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&&makeinstallnginx启动常用方式/usr/local/nginx/sbin/nginx#start/usr/local/nginx/sbin/nginx-sreload#restart/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参数详解systemctlrestartnginxsystemctlenablenginxsystemctlstopginx实战2二进制安装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#检测环境安装tomcattar-xfapache-tomcat-9.0.27mvapache-tomcat-9.0.27/usr/local/tomcat启动tomcatsh/usr/local/tomcat/bin/startup.sh#startsh/usr/local/tomcat/bin/shutdown.sh#closesystemdmanagementcontrolstartvim/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#DetectionStatus以上两个实战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"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;;stop)stop;;restart)stopstart;;esac写入systemd配置文件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启动abc服务systemctlrestartabc#startsystemctlenableabc#配置自启动systemctlstopabc#stop服务系统ctlstatusabc#检测状态