Skip to main content
本页覆盖部署最关键的三件事:看进程、管服务、查日志。一切围绕”让你的服务持续稳定运行”展开。

1. 进程管理

ps aux 输出每一列:
STAT 列状态字符auxa/u/x 是单字母选项(不带 --)含义:
  • a = all w/ tty,所有终端的进程
  • u = user-oriented format,按用户友好的格式
  • x = include processes w/o tty,连后台守护进程也算
ps aux | grep | awk '{print $2}' 这种老套路简单多了。
常用信号
kill,再 kill -9。直接 -9 容易让程序留下损坏文件、占用的端口没释放等问题。
管理后台任务:
nohup 适合临时启动。 生产环境建议用 systemd 管理服务(见下一章),自动重启、日志统一、开机自启。

2. systemctl —— 服务管理

systemd 是现代 Linux(Ubuntu 16+, CentOS 7+, Debian 8+)的初始化系统,负责开机启动、进程管理、日志收集等。 systemctl 就是控制 systemd 的命令 —— 部署完任何长期运行的服务(nginx / mysql / 你自己的应用),都靠它启动 / 停止 / 设置开机自启 / 看状态。

2.1 核心概念:unit / service

  • unit(单元):systemd 管理的对象,一个服务、一个挂载点、一个定时任务都是 unit
  • service(服务):最常见的 unit 类型,文件名以 .service 结尾
  • unit 文件位置
    • 系统自带:/lib/systemd/system/(不要改)
    • 自定义/覆盖:/etc/systemd/system/(在这里写自己的)

2.2 看状态:你最常用的命令

systemctl status nginx 输出怎么读:
重点看:

2.3 操控服务:start / stop / restart / reload

改了配置后:能 reloadreload(无中断),不行才 restart。比如 nginx 改 nginx.conf 后用 reload 即可。

2.4 开机自启:enable / disable

enablestartenable 只是配置开机自启,不会立即启动。要立即启动必须显式 start,或者加 --now

2.5 修改 unit 文件后必做:daemon-reload

只要你新建或修改了 .service 文件,systemd 不会自动感知,必须:
忘了 daemon-reload 是新手最常踩的坑 —— 明明改了文件却不生效。

2.6 写一个自己的 service 文件

部署一个 Python 应用作示例:
1

新建 service 文件

内容:
2

加载并启动

3

改了文件之后

3. 看日志

部署系统的核心活动之一就是看日志。systemd 服务用 journalctl,应用日志用 tail -f

3.1 journalctl — systemd 日志

-p 优先级(priority)速查:

3.2 tail -f — 应用日志实时看

Ctrl+C 退出。

3.3 日志通常在哪里

日志归档:服务跑久了日志会越来越大。logrotate 是系统自带的日志切割工具,配置在 /etc/logrotate.d/。看到 xxx.log.1xxx.log.2.gz 这些文件就是它分割出来的。

3.4 部署排错黄金流程

4. 附录:部署一个 Web 服务的完整命令链

把进程 / 服务 / 日志和其他章节的命令串起来,跑一遍:
这套流程涉及到的其他主题: