Linux使用systemd管理服务的操作指南
现代 Linux 都用 systemd 管理服务,替代了老的 SysVinit。部署 Java/Python 项目、写开机自启、看服务日志,全都要用 systemd。这篇从 Unit 文件写到实战部署。
一、什么是 systemd
systemd = 系统和服务管理器 老方式 service(SysVinit): 开机顺序执行脚本,无依赖关系,启动慢 /etc/init.d/xxx 脚本启动 新方式 systemd: 并行启动、按依赖排序、统一管理 /usr/lib/systemd/system/ 存 Unit 文件 用 systemctl 命令操作
# systemctl 常用命令 systemctl start nginx # 启动 systemctl stop nginx # 停止 systemctl restart nginx # 重启 systemctl status nginx # 查看状态 systemctl enable nginx # 开机自启 systemctl disable nginx # 取消自启 systemctl is-active nginx # 是否运行中
二、编写 Unit 文件
以部署一个 Java 项目为例,创建 /etc/systemd/system/myapp.service:
[Unit] Description=My Java Application # 描述 After=network.target mysql.service # 依赖:这些服务先启动 Wants=mysql.service # 软依赖,失败不阻塞 [Service] Type=simple # 简单类型,主进程前台运行 User=appuser # 以哪个用户运行(安全) WorkingDirectory=/opt/myapp # 工作目录 ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar myapp.jar # 启动命令 ExecStop=/bin/kill -s TERM $MAINPID # 停止命令 Restart=on-failure # 失败自动重启 RestartSec=5 # 重启等待5秒 Environment="JAVA_HOME=/usr/local/jdk" # 环境变量 StandardOutput=append:/var/log/myapp.log # 日志输出 StandardError=append:/var/log/myapp-error.log [Install] WantedBy=multi-user.target # 开机自启挂载点
Restart 策略对比:
| 策略 | 行为 |
|---|---|
| no | 不自动重启(默认) |
| on-failure | 非正常退出才重启(推荐生产) |
| always | 任何退出都重启 |
| on-abnormal | 信号/超时/看门狗等异常才重启 |
三、生效与开机自启
# 写完后必须重载配置 systemctl daemon-reload # 启动并设置开机自启 systemctl start myapp systemctl enable myapp # 查看状态(会显示是否开机自启 enabled) systemctl status myapp
部署 Java 项目的完整流程:
# 1. 创建应用目录并上传 jar mkdir -p /opt/myapp scp myapp.jar root@服务器:/opt/myapp/ # 2. 创建非root运行用户(安全) useradd -r appuser # 3. 写 Unit 文件(内容见上) vi /etc/systemd/system/myapp.service # 4. 重载并启动 systemctl daemon-reload systemctl enable --now myapp # 5. 验证 systemctl status myapp tail -f /var/log/myapp.log
四、日志查看 journalctl
journalctl -u myapp # 查看服务全部日志 journalctl -u myapp -f # 实时跟踪 journalctl -u myapp --since "1 hour ago" # 最近1小时 journalctl -u myapp -n 100 # 最近100行 journalctl -u myapp -p err # 只看错误级别
常见报错排查:
启动失败三步排查: 1. systemctl status myapp → 看错误提示 2. journalctl -u myapp -p err → 看详细错误日志 3. 检查文件权限 / 端口占用 / 环境变量 端口被占用: ss -tlnp | grep 8080 kill -9 <pid> # 或改配置文件端口
五、定时任务 systemd timer
systemd 也能做定时任务(替代 crontab):
# /etc/systemd/system/backup.service [Service] ExecStart=/opt/scripts/backup.sh # /etc/systemd/system/backup.timer [Timer] OnCalendar=*-*-* 02:30:00 # 每天凌晨2点半 Persistent=true # 错过时间下次开机补执行 [Install] WantedBy=timers.target
systemctl enable --now backup.timer systemctl list-timers # 查看所有定时任务
总结
systemd 三个要点:
1. Unit 文件三部分: [Unit] 描述依赖 / [Service] 启动参数 / [Install] 自启挂载 2. 每次改 Unit 文件都要 systemctl daemon-reload 3. 日志排查用 journalctl -u 服务名 生产部署推荐配置: Type=simple + Restart=on-failure + RestartSec=5 + 非root用户 + 日志落盘到文件
配合 systemctl status + journalctl,再也不用担心"服务挂了不知道"。
到此这篇关于Linux使用systemd管理服务的操作指南的文章就介绍到这了,更多相关Linux systemd管理服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
CentOS(Linux)下的apache服务器配置与管理方法分享
CentOS(Linux)下的apache服务器配置与管理方法分享,需要的朋友可以参考下。2011-04-04
apache中通过mod_rewrite实现伪静态页面的方法
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法!对初学者很有用的哦!2011-08-08
Centos 通过 Nginx 和 vsftpd 构建图片服务器的教程(图文)
本篇文章主要介绍了Centos 通过 Nginx 和 vsftpd 构建图片服务器的教程(图文),具有一定的参考价值,有兴趣的可以了解一下2017-08-08


最新评论