一、Systemd简介

  systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替常用的System V与BSD风格init程序。与多数发行版使用的System V风格init相比,systemd采用了以下新技术:

  • (1) 采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
  • (2) 用Cgroups代替PID来追踪进程,因此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

二、配置步骤

  centos8如果像设置服务开机自启动,可以参照centos7方式配置,不过建议使用systemd进行统一管理。此博文示例以配置java程序开机自启动为例进行介绍。

1、编写tomcat服务启停脚本

[root@centos8 tomcat8]# vim autojavaapp.sh
脚本内容如下

#!/bin/bash
#description: 这是tomcat8服务启动、停止、状态查看脚本APP_NAME="test.jar"usage() {echo "case: sh run.sh [start|stop|restart|status]"exit 1
}isExist(){pid=`pgrep -f ${APP_NAME}`#如果不存在返回1,存在返回0if [ -z "${pid}" ]; thenreturn 1elsereturn 0fi
}start(){isExistif [ $? -eq "0" ]; thenecho "${APP_NAME} is already running,pid = ${pid}."elsecd /opt/javaapp/nohup java -jar ${APP_NAME} > /dev/null 2>&1 &echo "${APP_NAME} start success"fi
}stop(){isExistif [ $? -eq "0" ]; thenkill -9 ${pid}elseecho "${APP_NAME} is not running"fi
}status(){isExistif [ $? -eq "0" ]; thenecho "${APP_NAME} is running. Pid is ${pid}"elseecho "${APP_NAME} is not running"fi
}restart(){stopstart
}case "$1" in
"start")start;;
"stop")stop;;
"status")status;;
"restart")restart;;
*)
usage
;;
esac

2、授予脚本可执行权限

[root@centos8 javaapp]# chmod u+x autojavaapp.sh

3、验证脚本启停服务是否正常

[root@centos8 javaapp]# sh autojavaapp.sh status
test.jar is not running
[root@centos8 javaapp]# sh autojavaapp.sh start
test.jar start success
[root@centos8 javaapp]# sh autojavaapp.sh status
test.jar is running. Pid is 18053
[root@centos8 javaapp]# sh autojavaapp.sh stop

4、进入systemd配置文件目录

[root@centos8 javaapp]# cd /usr/lib/systemd/system

5、创建javaapp.service服务

[root@centos8 system]# vim javaapp.service

[root@centos8 system]# pwd
/usr/lib/systemd/system
[root@centos8 system]# cat javaapp.service
[Unit]
Description=javaapp application for test auto start
Wants=network-online.target[Service]
User=root
Type=forking
ExecStart=/usr/bin/bash /opt/javaapp/autojavaapp.sh start
ExecStop=/usr/bin/bash /opt/javaapp/autojavaapp.sh stop
ExecReload=/usr/bin/bash /opt/javaapp/autojavaapp.sh restart[Install]
WantedBy=multi-user.target

6、重载systemd配置

[root@centos8 ~]# systemctl daemon-reload

7、配置javaapp服务开机自启动

[root@centos8 system]# systemctl enable javaapp
Created symlink /etc/systemd/system/multi-user.target.wants/javaapp.service → /usr/lib/systemd/system/javaapp.service.

8、启停服务测试

[root@centos8 system]# systemctl status javaapp

[root@centos8 system]# systemctl start javaapp
[root@centos8 system]# systemctl status javaapp

[root@centos8 system]# systemctl stop javaapp

9、重启验证

三、systemd配置文件说明

1、systemd配置文件夹:

systemd 配置文件存在于以下三个文件夹中:

  • /etc/systemd/system 存放系统启动的默认级别及启动的unit的软连接,优先级最高。
  • /run/systemd/system,系统执行过程中产生的服务脚本,优先级次之。
  • /usr/lib/systemd/system 存放系统上所有的启动文件。优先级最低

2、unit分类

unit的定义文件可以根据其后缀名称识别其定义的类型,可以使用systemctl -t help 查看。
.servicre定义了系统服务的启动
.target 定义了系统启动的级别标签,systemd 没有运行级别的概念,创建标签只是为了兼容老版本。
.socket 定义了进程通信用到的套接字,套接字与进程是分离的
.device 定义了系统启动时内核识别的文件,systemd提供了设备的管理功能,/dev 下的设备由/etc/udev/下的配置文件与.device共同定制
.mount 定义了系统的文件系统的挂载点
.snapshop 系统快照
.swap 用于标识swap设备
.automount 文件系统的自动挂载点
.path用于定义文件系统中的一个文件或目录使用。常用于文件系统发生变化时,延迟激活服务。

3、service文件组成:

1、service文件三部分

[Unit]
...
[service]
...
[install]

2)、Unit单元

[Unit] :不属于第二个标签的定义都放在这里,或存放不属于unit类型的定义,描述信息,依赖的unit

  • Description:描述信息
  • After:表明需要依赖的服务,作用决定启动顺序
  • Before:表明被依赖的服务
  • Requles:依赖到的其他unit ,强依赖,即依赖的unit启动失败。该unit不启动。
  • Wants:依赖到的其他unit,弱依赖,即依赖的unit 启动失败。该unit继续启动
  • Conflicts:定义冲突关系

3)、service单元

[Service]:

  • Type:启动时关系的定义,
  • simple:exec启动的进程就是主进程。
  • forking :exec 启动的进程生成的其中一个子进程成为主进程,启动完成后,旧的主进程会退出。
  • ontshot:启动下一个进程前主进程退出。
  • dbus:
  • notify:
  • ldle:
  • PIDFile=/var/run/sshd.pid
  • EnvironmentFile 需要使用到的变量的定义文件
  • ExecStart= 启动 unit需要执行的命令
  • ExecStartpre:
  • ExecStartpost:
  • ExecStop=停止unit需要执行的命令
  • Restart:
  • ExecReload=/bin/kill -HUP $MAINPID
  • KillMode=process
  • Restart=on-failure
  • RestartSec=42s

4)、install单元

[install]:服务启动或禁用时的一些选项

  • Alias:
  • RequlredBy: 被那些unit所依赖,
  • WanteBy:被那些unit所依赖

4、配置重载

修改了的unit文件需要重载,使用如下命令

#systemctl daemon-reload

centos8之systemd管理服务开机自启动相关推荐

  1. systemd下supervisord服务开机自启动以及注意事项

    systemd 下supervisord服务开机自启动 centos7 开机自启动脚本: #vim /lib/systemd/system/supervisord.service# superviso ...

  2. iptables规则备份和恢复,任务计划chkconfig工具systemd管理服务

    2019独角兽企业重金招聘Python工程师标准>>> iptables规则备份和恢复 备份 iptables-save > /tmp/ipt.txt service ipta ...

  3. cron计划任务、chkconfig工具、systemd管理服务、unit、target介绍

    1. linux任务计划cron linux的大部分系统管理工作都是通过定期自动执行某个脚本来完成的,那么如何定期执行某个脚本呢?这就要借助linux的cron功能了,这部分的内容很重要,请牢记! 命 ...

  4. Window服务器指定某软件/服务开机自启动

    在我们工作学习的过程中,难免会遇到使用Windows作为服务器,服务器中的某些软件或者服务必须时刻都在运行着,但是假如断电后,或者重启服务器,我们又得手动去开启某些软件以获取特定服务!这就给我们的工作 ...

  5. gogs 服务开机自启动

    gogs  服务开机自启动用到的命令 systemctl enable gogs.service systemctl start  gogs.service 把/usr/local/src/gogs/ ...

  6. linux设置开机自启服务,linux设置服务开机自启动的三种方式

    linux设置服务开机自启动的三种方式 这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用 ...

  7. windows10下配置nginx服务开机自启动

    windows10下配置nginx服务开机自启动 网站有很多教程,这里赘述一下,补充一点细节 1.下载"Windows Service Wrapper"工具 下载地址:https: ...

  8. 任务计划、chkconfig工具、systemd管理服务、unit、target

    比如备份数据或者重启服务. crontab -u.-e.-l.-r(删除) 格式:分 时 日 月 周 user command 文件/var/spool/cron/username 分范围0-59,时 ...

  9. systemctl手动配置mysql服务开机自启动

    一.背景: 系统:centos7 检查mysql8.0已安装,确保服务已启动,端口3307 [root@localhost ~]# ps -ef |grep mysql root 668 1 0 06 ...

最新文章

  1. 揭秘物联网之城无锡鸿山的科技密码
  2. 什么是滚动灯箱的全数字滚动系统?
  3. mysql innodb 锁_MySQL/InnoDB锁机制
  4. IPv6下CDN和网络的最佳实践
  5. 【OpenCV 例程200篇】35. 图像的投影变换(边界填充)
  6. 综述 | 自动驾驶中的计算机视觉
  7. 开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~
  8. 计算机网络中netbuie,材料内部空隙体积占其总体积的百分率叫做()。A、孔隙率B、填充率C、空隙率D、密实度...
  9. 百度换肤怎么实现的html,JavaScript 实现百度换肤功能
  10. 日志管理系统rsyslogd
  11. MYSQL安装+Mysql-front 注册码
  12. 点对点广域网技术介绍
  13. docker---docker save
  14. 微信公众号的号内搜索关键词怎么设置 号内搜索关键词删除和排序方法
  15. word括号显示问题
  16. Axure-中继器的使用
  17. 使用BoundsChecker查找内存泄露
  18. Confluent上市与Cloudera私有化背后:从硅谷大数据公司的势力更替看数据分析的未来...
  19. 【Linux操作系统】基础概念和常用指令(一)
  20. 范文:项目开发总结报告

热门文章

  1. csgo显示无法更新服务器,csgo更新无法连接服务器
  2. 关于未来人工智能时代的一点感想
  3. 如何做数据分析报告?
  4. [PHP代码审计]LightCMS1.3.7存在命令执行漏洞
  5. 转载 锁机制与原子操作 第四篇
  6. wireshark学习系列————4、实时捕捉数据包
  7. cdh6.2离线安装(傻瓜式安装教程)
  8. java中long=后面为什么还要加个L
  9. css3中斜杠_使用斜杠语法设置CSS3边界半径
  10. Android 实现SKU选择通用方式