当前位置:首页>Linux>Linux 系统高级管理完全指南:进程、服务、定时任务与日志全栈实践

Linux 系统高级管理完全指南:进程、服务、定时任务与日志全栈实践

  • 2026-10-11 05:40:16
Linux 系统高级管理完全指南:进程、服务、定时任务与日志全栈实践

Linux 系统高级管理完全指南:进程、服务、定时任务与日志全栈实践

本文涵盖Linux系统高级管理的四大核心模块:进程管理、systemd管控系统和服务、自动化任务配置、系统日志管理。所有命令和配置均基于主流Linux发行版(RHEL/CentOS/Debian/Ubuntu)。

一、进程管理

1.1 查看进程

ps命令——静态查看当前进程快照:

1
2
3
4
5
6
7
8

# 查看所有进程的详细信息ps aux# 查看特定用户的进程ps -u username# 树形显示进程间关系ps axjf

ps aux会列出所有进程的详细信息,包括用户、CPU使用率、内存使用率等。

top命令——动态实时监控:

1
2
3
4
5
6
7

# 启动toptop# top交互快捷键:# 按 P —— 按CPU使用率排序# 按 M —— 按内存使用率排序# 按 q —— 退出

htop命令——top的增强版:

htop提供更丰富的界面和更直观的操作体验。可用方向键选择进程,按F9发送信号,按F5切换树形视图。

1
2
3
4
5
6

# 安装htop(如未安装)sudo apt install htop      # Debian/Ubuntusudo yum install htop      # RHEL/CentOS# 启动htop

其他查看工具:

1
2
3
4
5
6
7
8

# 查看进程树pstree# 按名称查找进程IDpgrep nginx# 查看进程打开的文件lsof -p PID

1.2 管理进程——发送信号

使用kill、pkill、killall向进程发送信号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 按PID发送信号(默认SIGTERM,优雅终止)kill 1234# 强制终止kill -9 1234          # SIGKILL# 重新加载配置(不重启进程)kill -HUP 1234        # SIGHUP# 按名称终止(精确匹配)killall nginx# 按名称模式终止(支持正则)pkill -9 "python.*"# 常用信号:# 1  SIGHUP   - 重新加载配置# 9  SIGKILL  - 强制杀死# 15 SIGTERM  - 优雅终止(默认)

1.3 调整进程优先级

Linux中Nice值范围从**-20(最高优先级)** 到**+19(最低优先级)** ,默认值为0。

启动时设置优先级(nice) :

1
2
3
4
5

# 以较低优先级运行(+10)nice -n 10 ./long_task.sh# 以较高优先级运行(需要root权限)sudo nice -n -5 ./critical_task.sh

调整已运行进程的优先级(renice) :

1
2
3
4
5
6
7
8

# 将PID为1234的进程优先级调整为5renice 5 -p 1234# 调整某用户所有进程的优先级renice +10 -u username# 调整某组所有进程的优先级sudo renice -n 10 -g 4    # GID为4的进程组

注意:普通用户只能调低优先级(增大nice值),只有root可以调高优先级(减小nice值)。

1.4 前后台作业管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 后台运行(加 &)./long_task.sh &# 查看后台作业jobs# 将后台作业调到前台fg %1# 将前台作业放到后台(先Ctrl+Z暂停,再bg)bg %1# 断开终端后继续运行nohup ./long_task.sh &

nohup的输出默认写入nohup.out文件。

二、systemd管控系统和服务

systemd是目前主流Linux发行版的默认初始化系统(PID 1),提供统一的服务管理、依赖解析、cgroup资源限制与journald日志收集。

2.1 systemctl——服务管理核心命令

基本服务操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 启动服务sudo systemctl start nginx.service# 停止服务sudo systemctl stop nginx.service# 重启服务sudo systemctl restart nginx.service# 重新加载配置(不停机)sudo systemctl reload nginx.service# 查看服务状态systemctl status nginx.service

开机自启管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 启用开机自启sudo systemctl enable nginx.service# 取消开机自启sudo systemctl disable nginx.service# 检查是否已启用systemctl is-enabled nginx.service# 彻底禁用(无法被其他服务启动)sudo systemctl mask nginx.service# 取消禁用sudo systemctl unmask nginx.service

查看与诊断:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 列出所有正在运行的单元systemctl list-units# 列出所有已安装的单元文件systemctl list-unit-files# 显示服务的详细属性systemctl show nginx.service# 查看服务单元文件内容systemctl cat nginx.service# 查看启动耗时systemd-analyze blame# 查看关键启动链systemd-analyze critical-chain

2.2 编写自定义服务单元文件

自定义服务单元文件应放在/etc/systemd/system/目录下。一个完整的.service文件由三部分组成:

[Unit]段——描述与依赖

1
2
3
4
5

[Unit]Description=My Custom ApplicationAfter=network-online.targetWants=network-online.targetRequires=mysql.service

  • • After:定义启动顺序(排序约束)
  • • Wants:弱依赖,依赖失败不影响本服务启动
  • • Requires:强依赖,依赖失败则本服务也失败

建议使用network-online.target而非network.target,前者更稳健,可避免网络驱动延迟导致启动失败。

[Service]段——启动方式与行为

1
2
3
4
5
6
7
8
9
10
11

[Service]Type=simpleUser=appuserGroup=appgroupWorkingDirectory=/opt/myappExecStart=/opt/myapp/venv/bin/python worker.pyExecReload=/bin/kill -HUP $MAINPIDRestart=on-failureRestartSec=5sStartLimitBurst=5StartLimitIntervalSec=60s

Type字段最常用的三种:

  • • simple(默认):前台运行,启动后不fork
  • • forking:传统daemon,会fork子进程后父进程退出,需配合PIDFile
  • • notify:程序通过sd_notify通知systemd已就绪,时序最准确

Restart字段:

  • • no(默认):不重启
  • • on-failure:非零退出码或被信号杀掉时重启(推荐)
  • • always:任何退出都重启

资源限制(通过cgroup实现):

1
2
3
4

[Service]MemoryMax=512M          # 内存上限,超出即OOMCPUQuota=50%            # CPU使用上限TasksMax=100            # 最大任务数

[Install]段——安装目标

1
2

[Install]WantedBy=multi-user.target

WantedBy=multi-user.target表示系统进入多用户模式时启动此服务,systemctl enable会根据此配置创建软链接。

完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# /etc/systemd/system/myapp.service[Unit]Description=My Python Web ApplicationAfter=network-online.targetWants=network-online.target[Service]Type=simpleUser=appGroup=appWorkingDirectory=/opt/myappExecStart=/usr/bin/python3 /opt/myapp/app.pyRestart=on-failureRestartSec=5sMemoryMax=512M[Install]WantedBy=multi-user.target

部署新服务

1
2
3
4
5
6
7
8
9

# 创建/修改单元文件后,必须重新加载systemdsudo systemctl daemon-reload# 启用并启动sudo systemctl enable myapp.servicesudo systemctl start myapp.service# 验证状态systemctl status myapp.service

2.3 systemd timer——现代化的定时任务

systemd timer是cron的现代替代方案,具备更好的日志、依赖管理和状态追踪能力。

创建定时器需要两个文件:

1. 服务单元文件(定义要执行的任务):

1
2
3
4
5
6
7

# /etc/systemd/system/backup.service[Unit]Description=Daily Backup[Service]Type=oneshotExecStart=/usr/local/bin/backup.sh

2. 定时器单元文件(定义触发规则):

1
2
3
4
5
6
7
8
9
10
11

# /etc/systemd/system/backup.timer[Unit]Description=Run backup daily at 3am[Timer]OnCalendar=dailyOnCalendar=03:00:00Persistent=true[Install]WantedBy=timers.target

启用并启动定时器:

1
2
3
4
5

sudo systemctl enable backup.timersudo systemctl start backup.timer# 查看定时器状态systemctl list-timers

三、自动化任务配置(Cron)

3.1 Cron基础

Cron是Linux经典的基于时间的作业调度器。配置分为两层:

系统级配置:/etc/crontab及/etc/cron.d/目录

1
2
3
4
5
6
7

# /etc/crontab 示例SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# 每天凌晨3点执行备份0 3 * * * root /scripts/backup.sh

用户级配置:通过crontab -e编辑,存储在/var/spool/cron/下

1
2
3
4
5
6
7
8

# 编辑当前用户的定时任务crontab -e# 查看当前用户的定时任务crontab -l# 删除所有定时任务(慎用)crontab -r

预定义目录(脚本放入即可自动执行):

  • • /etc/cron.hourly/ —— 每小时
  • • /etc/cron.daily/ —— 每日
  • • /etc/cron.weekly/ —— 每周
  • • /etc/cron.monthly/ —— 每月

3.2 Cron时间表达式

1
2
3
4
5
6
7

* * * * * 要执行的命令│ │ │ │ ││ │ │ │ └── 星期 (0-7, 0和7都代表周日)│ │ │ └──── 月份 (1-12)│ │ └────── 日期 (1-31)│ └──────── 小时 (0-23)└────────── 分钟 (0-59)

运算符:

  • • *:通配符,匹配所有值
  • • ,:枚举,如1,3,5
  • • -:范围,如10-12
  • • /:步长,如*/5表示每5个单位

常用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 每5分钟执行*/5 * * * * /script.sh# 每天下午3点执行0 15 * * * /script.sh# 每周一至周五下午3点执行0 15 * * 1-5 /script.sh# 每月1号和15号凌晨执行0 0 1,15 * * /script.sh# 每小时执行0 * * * * /script.sh

3.3 Cron日志与调试

Cron任务默认静默失败,需主动配置日志:

1
2
3
4
5
6

# 在crontab中重定向输出0 3 * * * /scripts/backup.sh >> /var/log/backup.log 2>&1# 查看cron日志journalctl -u cron -f          # systemd系统tail -f /var/log/syslog        # 传统系统

四、系统日志管理

现代Linux系统通常采用systemd-journald + rsyslog的双日志架构。

4.1 journalctl——查询systemd日志

基本查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 查看某服务的日志journalctl -u nginx.service# 实时跟踪(类似tail -f)journalctl -u nginx.service -f# 查看最近10分钟的日志journalctl -u nginx --since "10 min ago"# 查看今天的日志journalctl --since today# 查看本次启动后的日志journalctl -b# 查看上次启动的日志(调试启动失败)journalctl -b -1# 只看错误级别及以上journalctl -p err -b# 查看内核日志journalctl -k

多条件过滤:

1
2
3
4
5
6
7
8

# 按服务名和PID过滤journalctl _SYSTEMD_UNIT=docker.service _PID=12345# 输出JSON格式(便于脚本处理)journalctl -u nginx -o json# 查看特定可执行文件的日志journalctl /usr/bin/bash

4.2 配置日志持久化

journald默认将日志存储在/run/log/journal/(内存中),重启后丢失。启用持久化:

1
2
3
4
5

# 1. 创建持久化目录sudo mkdir -p /var/log/journal# 2. 编辑配置文件sudo vim /etc/systemd/journald.conf

推荐配置:

1
2
3
4
5
6
7
8
9

[Journal]Storage=persistent          # 启用持久化SystemMaxUse=2G             # 最大磁盘占用SystemKeepFree=4G           # 保留可用空间SystemMaxFileSize=128M      # 单文件大小SystemMaxFiles=100          # 最大文件数MaxRetentionSec=30day       # 最长保留30天Compress=yes                # 启用压缩Seal=yes                    # 日志签名防篡改

1
2
3
4
5

# 3. 重启journaldsudo systemctl restart systemd-journald# 4. 查看实际占用journalctl --disk-usage

手动清理日志:

1
2
3
4
5
6
7
8

# 压缩到500MB以内journalctl --vacuum-size=500M# 只保留7天journalctl --vacuum-time=7d# 强制立即轮转journalctl --rotate

4.3 rsyslog配置

rsyslog主配置文件为/etc/rsyslog.conf,自定义配置放在/etc/rsyslog.d/*.conf。

1
2
3
4
5

# 编辑rsyslog配置sudo vim /etc/rsyslog.conf# 或添加自定义规则sudo vim /etc/rsyslog.d/50-default.conf

常见日志文件位置:

  • • /var/log/syslog —— 系统整体日志
  • • /var/log/auth.log —— 认证日志
  • • /var/log/kern.log —— 内核日志
  • • /var/log/messages —— 通用系统消息
1
2

# 修改配置后重启rsyslogsudo systemctl restart rsyslog

4.4 journald与rsyslog协同

两者可共存:journald采集日志后通过imjournal模块转发给rsyslog,rsyslog再按规则写入文本文件。若只需journald,可在/etc/systemd/journald.conf中设置ForwardToSyslog=no以节省IO。

完整日志管理组合:systemd-journald + rsyslog + logrotate覆盖从采集、持久化到归档的全流程。

五、综合实战:部署一个自愈服务

以下示例结合systemd服务、cron健康检查和journalctl日志监控:

1. 创建服务单元~/.config/systemd/user/myapp.service:

1
2
3
4
5
6
7
8
9
10
11
12

[Unit]Description=My Python Web AppAfter=network.target[Service]ExecStart=/usr/bin/python3 -m http.server 8080Restart=alwaysRestartSec=5WorkingDirectory=/home/user/myapp[Install]WantedBy=default.target

2. 启用用户服务:

1
2
3

systemctl --user daemon-reloadsystemctl --user enable myappsystemctl --user start myapp

3. 创建健康检查脚本~/scripts/check_myapp.sh:

1
2
3
4
5

#!/bin/bashif ! systemctl --user is-active --quiet myapp; then    echo "Service down at $(date)" | systemd-cat -p err    systemctl --user restart myappfi

4. 添加到crontab(每5分钟检查):

1

*/5 * * * * /home/user/scripts/check_myapp.sh

5. 查看日志:

1

journalctl --user-unit=myapp -f


以上教程涵盖了Linux系统高级管理的四大核心模块。建议在测试环境中逐一实践,将理论知识转化为实际操作能力。

最新文章

随机文章