连载中 12/20

systemd:服务管理的现代姿势

2026-10-17 · 19 阅读 · 0 评论 · 0 赞

从 service 到 systemctl

老教程里的 service nginx start 如今只是个兼容壳,背后都转给了 systemd——现代 Linux 的 1 号进程(PID 1),系统里所有服务的总管家。它的命令前缀是 systemctl。

$ systemctl start nginx       # 启动
$ systemctl stop nginx        # 停止
$ systemctl restart nginx     # 重启(断了再起)
$ systemctl reload nginx      # 重载配置(不断服务,nginx 常用)
$ systemctl status nginx      # 状态 + 最近日志(排错第一眼)
$ systemctl enable nginx      # 开机自启(一次性设置,不是启动!)
$ systemctl disable nginx     # 取消开机自启
$ systemctl list-units --state=failed    # 看有没有服务挂了

区分两组概念:start/stop 是「现在」,enable/disable 是「未来开机」——只 enable 不 start,服务现在并不会跑。

unit 文件:服务的户口本

每个服务是一个 .service 文件,自研服务放 /etc/systemd/system/。把 Spring Boot 应用注册成服务只需十几行:

# /etc/systemd/system/note-app.service
[Unit]
Description=Note Spring Boot App
After=network.target mysql.service     # 依赖:网络和 MySQL 就绪后再起

[Service]
User=app                               # 专用用户跑(权限篇的三军规)
ExecStart=/opt/jdk/bin/java -jar /opt/app/note.jar --server.port=8080
Restart=always                         # 挂了自动拉起
RestartSec=5

[Install]
WantedBy=multi-user.target

最值钱的是 Restart=always——进程 OOM、异常退出都能被自动拉起,这是 nohup 永远给不了的。

改完配置的两步收尾

$ systemctl daemon-reload      # 新建/修改 unit 文件后必做(重载配置清单)
$ systemctl enable --now note-app    # 设自启 + 立即启动(一步到位)
$ systemctl status note-app    # Active: active (running) 才算起好了

状态起不来时,status 输出的最后几行就是最近日志;想看全量,journalctl -u note-app -f——systemd 顺手接管了日志,这个命令在日志篇还会重点讲。

常见翻车点

改了 unit 不 reload——systemd 用的还是旧配置;ExecStart 必须写绝对路径——包括 java 本身,没有 PATH 环境变量可用;User 忘了配——默认 root 跑,安全审计过不了。下一篇:软件包管理——yum 和 apt 的两大家族、装过的软件去哪了、以及命令找不到时怎么反查它属于哪个包。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#systemd#systemctl#服务管理#开机自启#unit文件

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞