【笔记】systemd 管理自定义服务--编写配置Tomcat Service单元文件

一,背景介绍

在Linux系统中,systemd是主流初始化系统和服务管理器。我们可以通过编写systemd服务单元文件,方便地进行服务启动、停止、重启及开机自动启动管理。

本文以Tomcat为例子,手写一个systemd服务单元文件,使得tomcat服务可以直接被systemd管理。

二,为什么要编写自定义systemd服务单元?

1.系统默认没有提供对应服务。

2.需要定制启动参数或环境变量

3.方便集成自动启动、依赖管理以及日志收集

4.简化运维操作,统一管理服务生命周期

三、systemd单元文件基础结构

一个systemd服务文件一般位于 /etc/systemd/system/ 目录下,文件名以 .service 为结尾。

标准模版:

[Unit]
Description=服务描述信息
After=依赖服务或目标(比如 network.target)

[Service]
Type=simple / forking / notify / oneshot  # 启动类型

User=运行用户
Group=运行用户组


Environment=环境变量定义
ExecStart=启动命令及参数
ExecStop=停止命令及参数
Restart=重启策略(可选)

[Install]
WantedBy=目标(如 multi-user.target)

四,实战:为Tomcat编写systemd服务文件[Service] 定义服务启动和停止的细节

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

User=ka1ou
Group=ka1ou

Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
Environment=CATALINA_PID=/opt/apache-tomcat-10.1.43/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/apache-tomcat-10.1.43
Environment=CATALINA_BASE=/opt/apache-tomcat-10.1.43

ExecStart=/opt/apache-tomcat-10.1.43/bin/startup.sh
ExecStop=/opt/apache-tomcat-10.1.43/bin/shutdown.sh

Restart=on-failure

[Install]
WantedBy=multi-user.target

关键点说明:

[Unit] 

 Description:简短描述服务

After=network.target 网络服务启动后再启动tomcat,保证网络环境可用。

[Service]

Type=forking 说明启动脚本会fork一个子进程,父进程退出

User和Group   指定服务运行的用户权限,避免用root运行,提高安全性

Environment   设置环境变量,方便脚本引用

ExecStart 和 ExecStop 定义启动和停止命令(脚本)

Restart=on-failure 自动重启失败的服务(可不写)

[Install]

WantedBy=multi-user.target  允许服务在多用户模式下自动启动

补充:

forking:启动脚本会fork一个子进程后让父进程退出,systemd会认为子进程是服务的主进程。主要用于传统的后台服务程序(tomcat,mysql,httpd,等)。需要通过PIDFile= 来让systemd跟踪子进程,否则管理不精确。

simple:默认型,服务启动后,ExecStart里运行的主进程不会fork,直接运行。systemd会认为执行ExecStart进程就是服务的主进程,不需要额外判定进程是否完成启动。大多数为前台运行的守护进程(gunicorn,nginx -g “daemon off;”,各类Python/NodeJS应用)

oneshot:用于执行一次性命令,systemd会等待命令执行完毕。不会持续运行服务(除非结合RemainAfterExit=yes)。适合运行初始化脚本,配置任务等。主要运用在启动时只需要运行一次的命令(加载内核模块、设计环境变量、挂载磁盘等)

notify:需要服务程序本身支持systemd通知机制(通过sd_notify),systemd会等待服务显式发送READY=1消息才认为启动完成。高级功能,一般用于需要精准控制启动阶段的服务(如etcd,docker)。用于对启动完成有严格定义的服务,必须调用libsystemd的通知API。

五、配置完成后的操作流程

1.将service文件保存到 /etc/systemd/system/tomcat.service

2.sudo systemctl daemon-reload 重新加载systemd配置

3.sudo systemctl start tomcat   启动服务

4.sudo systemctl status tomcat  查看服务状态

5.sudo systemctl enable tomcat  设计开机自启

6.sudo systemctl stop tomcat   停止服务

六、常见问题以及排查建议

     =>服务无法启动

           检查ExecsStart路径和权限是否正确

           查看journalctl -u tomcat 获取详细日志

     =>权限问题

           确认user运行用户对tomcat目录有读写权

     =>服务未开机启动

           确认执行了systemctl enable命令,并无报错

     =>服务崩溃自动重启无效

           检查Restart 参数设置是否正确

七、总结

会写systemd service文件十分必要,可以更好地控制服务状态,实现自动化管理,帮助运维进行日志管理,同时做到安全隔离,从而提升运维效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值