linux自定义systemd服务必须包含[unit]、[service]、[install]三段:[unit]定义描述与依赖(如after=network.target),[service]配置type、绝对路径execstart等运行逻辑,[install]通过wantedby=multi-user.target实现开机自启。

用 systemd 管理服务,核心就三件事:写对配置、加载生效、按需控制。它不是替代你手动运行程序,而是让程序真正成为系统的一部分——开机就跑、挂了自拉、查状态和日志都有一条命令搞定。
服务配置文件怎么写
服务定义靠 .service 文件,放在 /etc/systemd/system/(管理员自定义)最稳妥。一个最小可用配置包含三块:
-
[Unit]:说明服务是干啥的,依赖谁。常用
Description=写描述,After=network.target表示等网络起来再启动;如果需要联网才工作,加一行Wants=network-online.target更可靠。 -
[Service]:定义怎么跑。关键项有:
•Type=simple(默认,适合 jar、python、bash 脚本等直接前台运行的程序)
•User=和Group=指定非 root 用户运行(安全必需)
•WorkingDirectory=设工作目录(避免路径错误)
•ExecStart=写完整绝对路径的启动命令(如/usr/bin/java -jar /opt/app.jar)
•Restart=on-failure或always控制异常重启行为,RestartSec=3设重试间隔秒数 -
[Install]:决定“启用”时怎么挂载。固定写
WantedBy=multi-user.target,表示加入标准多用户运行级别。
服务启停与状态查看
配置写完不生效,得走标准流程:
- 重载配置:每次改完
.service文件后,必须执行sudo systemctl daemon-reload,否则 systemd 不知道有新东西。 - 立即启停:
sudo systemctl start demo-api启动,stop停止,restart重启。这些操作不改变开机行为,只是当前会话控制。 - 查状态:
sudo systemctl status demo-api看是否 active、最近日志、退出码。绿色 “active (running)” 是理想状态;红色 “failed” 时,下面几行日志通常直接告诉你错在哪(比如端口被占、配置文件缺失、权限不够)。
设置开机自启
“开机就跑”不是靠写进 /etc/rc.local 或 crontab @reboot,而是用 enable:
- 执行
sudo systemctl enable demo-api,systemd 会在/etc/systemd/system/multi-user.target.wants/下建一个指向你 service 文件的软链接。 - 这个动作只做一次,之后每次重启都会自动触发
start。禁用则用disable命令删掉链接。 - 注意:
enable不等于立刻启动。想同时启动+开机自启,就再补一句sudo systemctl start demo-api。
日志与排障实用技巧
systemd 自带日志聚合,不用翻 app.log:
- 看最近 50 行服务日志:
sudo journalctl -u demo-api -n 50 --no-pager - 实时跟踪日志:
sudo journalctl -u demo-api -f(类似tail -f) - 查上次启动的完整日志(含启动前环境):
sudo journalctl -u demo-api --since "2026-08-28 14:00:00" - 常见失败原因:Java 找不到、jar 权限不对(
chown demo:demo /opt/demo-api/app.jar)、application-prod.yml路径没配对、端口被占用(ss -tlnp | grep :8080查)。











