首页/系统/Linux 运维命令速查/编写一个生产级 .service 单元
systemd 与服务42 条

编写一个生产级 .service 单元

自建服务落成 systemd 单元的完整要点:ExecStart 绝对路径、User 降权、Restart 策略、日志与依赖、环境变量。

Linux 运维命令速查系统更新于 2026-10-12
用途把自研程序托管为 systemd 服务
语法/etc/systemd/system/<name>.service
所属systemd

完整模板

完整模板
[Unit]
Description=My App
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
Environment=JAVA_HOME=/usr/lib/jvm/java-17
EnvironmentFile=-/etc/myapp/env
ExecStart=/opt/myapp/bin/start --config /etc/myapp/app.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target

启用

启用
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp --no-pager
Type=simple 适合前台进程;fork 型老程序用 Type=forking;一次性脚本用 Type=oneshot。

易错点

  • ExecStart 必须绝对路径且不支持 shell 语法(管道/重定向),需要 shell 就用 bash -c 包一层
  • Environment 里的 $VAR 不展开:要用 % 转义或 shell 包装,别当 shell 脚本写

数据来源与参考

  • man 5 systemd.service
  • man 5 systemd.exec(User/Environment 等)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌