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管理控制

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环境,配置环境变量

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 #检测状态

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

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

# 编写一个启动脚本
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 #检测状态

最新文章

  1. 《玩转D语言系列》三、轻松大跃进,把它当C语言先用起来
  2. Android开发学习之路-GSON使用心得(OCR图片识别)
  3. JS代码片段
  4. GNU LIBC源代码学习之strcmp
  5. iOS内存管理系列之一:对象所有权与引用计数
  6. win7开机密码忘记了
  7. 在Android Studio上测试运行,Unity发布成Android包的环境搭建步骤
  8. java如何获得数据库表中各字段的字段名
  9. Python实现UI自动化
  10. DDD领域模型数据访问权限之权限(十二)
  11. mybatis初识
  12. WPF自定义TabControl样式
  13. Windows7下Java运行时环境搭建
  14. 如何区别英语前缀pri,pro,per,pre?
  15. HttpPostedFile类
  16. 1067 Sort with Swap(0, i) (25 分)
  17. Android-Java-进程与线程
  18. iOS 计算源码行数
  19. 观察者模式/ java实现附代码 /
  20. 010. VS2015创建MVC项目

热门文章

  1. SpringBoot事件监听器源码分析
  2. 常用类-jdk8之前的日期和API
  3. Nginx工作模式
  4. 数据质量管理工具预研——Griffin VS Deequ VS Great expectations VS Qualitis
  5. 03 uniapp自定义导航栏的开发
  6. VGA显示原理
  7. 【我的面试-01】Web前端开发实习岗-面试题总结
  8. CF1381B Unmerge(位运算的作用)
  9. python 常用的魔法函数
  10. 基于WPF重复造轮子,写一款数据库文档管理工具(一)