Linux 进程·作业·服务·定时与电源
查看系统进程信息
- 常见命令
shell
ps -ef # 查看系统中所有进程的信息
ps aux # 查看系统中所有进程的详细信息- 各列代表的含义
shell
USER # 进程属于哪个用户
PID # 进程ID号,每个进程的唯一标识符(非负整数),由内核分配。
%CPU # 进程占用cpu资源的百分比,越高越耗费资源
%MEM # 进程占用物理内存的百分比,越高越耗费资源
VSZ # 进程占用虚拟内存的大小,单位KB
RSS # 进程占用实际物理内存的大小,单位KB
TTY # 进程是由哪个终端运行的,tty1 - tty7
STAT # 进程的状态,S 进程在睡眠状态可被唤醒
START # 进程耗费CPU运算的时间
TIME # 进程已经占用的CPU时间
COMMAND # 进程名称(用此判断哪个进程正在运行)- 其他常用命令
shell
ps aux --sort -rss # 查看进程占用物理内存排行,按 %MEM 列降序排列实时查看系统中有哪些进程正在运行
- 命令行输入
shell
top- 各行代表的含义
shell
第一行:系统当前时间,系统运行时间,系统在之前1分钟、5分钟、15分钟的平均负载
第二行:当前的进程总数,正在运行的进程数,睡眠的进程数、停止的进程数
第三行:被用户占用的CPU-us,被系统占用的CPU-sy,被修改优先级的占用的CPU-ni、空闲的CPU-id
第四行:总内存数,被占用内存,空闲内存,缓冲内存
第五行:交换分区- 判断服务器健康状态
shell
一般来讲内存低于 70%,cpu 低于 90% 的状态是系统的安全状态,过高都属于亚健康状态- 其他常用命令
shell
top -b -n 1 > /root/top.log # 将现在的所有进程状态写入日志文件查看进程之间的依赖关系
shell
pstree
pstree -p # 显示进程树
pstree -u # 显示进程的所属用户进程管理
- kill 命令:关闭和重启进程
shell
# kill [num] PID
kill [1] PID # 重启进程(通过PID)
kill [9] PID # 关闭进程(通过PID)
# 示例
ps aux # 查看PID
kill 1 52212 # 重启PID为52212的进程
kill 9 52212 # 关闭PID为52212的进程- killall 命令:批量操作
shell
# killall [num] 包名
killall -9 包名 # 关闭包下的所有进程
# 示例
killall -9 httpd # 关闭httpd下的所有进程- pkill 命令:杀死某一类进程,通常是管理员操作将某个或者其他用户踢出服务器终端
shell
pkill -9 -u user1 # 杀掉 user1 用户下的所有进程
pkill -9 -t pts/1 # 杀掉 pts/1 终端下的所有进程
pkill -9 -v -u root # 杀死除了root用户的所有进程:::tip有些命令需要持续运行,运行期间,管理员无法操作命令行,所以需要把此命令放入后台运行,不影响命令行操作 :::
前后台作业切换的三种状态
前台:直接与终端交互的进程,会占用终端输入输出(比如:pm2 start app.js --name "my-app")
后台:在后台运行,不占用终端,终端可继续接收其他命令(通常通过在命令后加 & 启动,如 python script.py &)。
暂停:被暂停(挂起)的进程,可通过命令恢复到前台或后台运行(如按 Ctrl+Z 暂停前台进程)。
前后台作业:查看、转后台、转回前台、终止
- 查看命令
shell
# 基础语法
jobs [选项] # 列出当前 shell 的所有前后台作业
# 选项
-l # 显示作业的进程 ID、PID、状态、命令,便于结合 kill 等命令(最常用)
-p # 仅显示作业的 PID(不显示其他信息)
-n # 仅显示自上次检查后状态发生变化的作业。
-r # 仅显示正在运行的作业
-s # 仅显示已暂停的作业。
# 结果
编号 PID 状态 命令
[1] 468077 Stopped (tty output) vim hello.txt
# 常见状态
Running:正在后台运行。
Stopped:被暂停(通常由 Ctrl + Z 触发)。
Done:已完成(退出码为 0)。
Exit:已退出(退出码非 0)。- 将作业放入后台
shell
# 场景一:执行任意命令时放入后台
运行任意命令时 直接加 & # 比如:vim hello.txt &
# 场景二:将前台运行的命令暂停并放入后台
:先按 Ctrl + Z- 将后台作业调至前台
shell
# 查看作业列表的编号
jobs -l
# 基础语法
fg %编号 # 比如:将编号 2 的作业调至前台,执行 fg %2,如果只执行 fg 则操作最近的作业- 终止后台作业
shell
# 查看作业列表的编号|PID
jobs -l
# 通过编号杀死作业
kill %编号 # 比如:将编号 2 的作业杀死,执行 kill %2
jobs # 第一次查看,编号 2 的状态变为 Terminated
jobs # 第二次查看,编号 2 整行消失
# 有时 kill %编号 无法杀死作业,则需要使用
kill -9 PID # 比如:将PID为 468077 的作业杀死,执行 kill -9 468077
jobs -l # 第一次查看,PID 为 468077 的状态变为 Killed
jobs -l # 第二次查看,PID 为 468077 整行消失注意事项
- jobs 仅显示当前 shell 环境中的作业,切换到其他 shell(如重新登录或打开新终端)后无法查看。
- 若作业已完成(状态为 Done 或 Exit),jobs 可能仍会显示,直到 shell 刷新状态(可通过再次执行 jobs 或操作其他作业触发)。
在 linux 中使用 at 设置只执行一次的定时任务,使用 cron 设置周期性执行任务 :::
at 定时任务(只执行一次的定时任务)
在 Linux 系统中,at 命令用于安排一次性的定时任务(与 cron 用于周期性任务不同),适合执行只需要运行一次的操作。
- 常见操作:安装、启动、关闭、查看、设置定时任务
shell
# 安装
yum install at
# 启动
systemctl start atd
# 重启
systemctl restart atd
# 关闭
systemctl enable atd
# 查看 at 定时任务服务是否开启
systemctl status atd # 或者 ps aux | grep atd
# 基础语法
at [选项] 时间
# 选项:查看、删除、文件、邮件
-l # 列出当前用户的所有 at 任务(等同于 atq 命令)
-c <任务编号> # 根据工作号查看定时执行的是什么操作
-d <任务编号> # 删除指定任务(等同于 atrm 命令),比如:at -d 1
-f <脚本文件> # 从文件读取任务命令,而非交互输入,比如:at 15:00 -f /path/to/script.sh,15:00执行脚本
-m # 任务执行完成后,通过邮件通知用户(需系统邮件服务支持)
# 时间
at 14:30 # 今天 14:30 执行
at midnight | at 00:00 # 今天午夜
at noon # 今天中午
at 14:30 2025-10-30 # 2025 年 10 月 30 日 14:30 执行
at 14:30 tomorrow # 明天 14:30
at next monday 10:00 # 下周一 10:00 点
at now # 立即执行
# at 最小是分钟,不支持 秒,非要秒,可借助 sleep 命令
at now + 5 minutes # 5 分钟后
at now + 1 hour # 1 小时后
at now + 3 days # 3 天后
at now + 2 weeks # 2 周后
# 设置定时任务
方式一(定时执行多条命令):at 时间 # 输入命令回车后会进入 at 的交互模式,输入 要执行的linux命令,不断回车可执行多条命令,最后,按 Ctrl+D 结束并提交任务。
方式二(定时只执行一条命令):echo '要执行的linux命令' | at 时间
# 方式一:1 分钟后将执行 echo "Hello world" > /tmp/at_test.txt
echo 'echo "Hello world" > /tmp/at_test.txt' | at now + 1 minutes
# 方式二:1 分钟后将 "one" "two" "three" 字符先后写入到 /tmp/at_test.txt 文件中
at now + 1 minutes
回车
> echo "one" > /tmp/at_test.txt
回车
> echo "two" >> /tmp/at_test.txt
回车
> echo "three" >> /tmp/at_test.txt
执行 ctrl + D- at 权限控制(白名单和黑名单,控制哪些用户可使用此命令)
shell
ls /etc/at* # 查看黑白名单配置文件
vim /etc/at.deny # 黑名单,禁止使用 at 的用户列表(默认存在,为空则允许所有用户)
vim /etc/at.allow # 白名单,允许使用 at 的用户列表(优先级高于 at.deny)- 常见案例
shell
# 5 分钟后重启 Apache 服务
echo "systemctl restart httpd" | at now + 5 minutes
# 2 小时后清理 /tmp 目录下 7 天前的文件
echo "find /tmp -type f -mtime +7 -delete" | at now + 2 hours
# 2025 年 12 月 31 日 23:59 执行日志归档
echo "tar -czf /logs/archive_$(date +%Y%m%d).tar.gz /var/log/*" | at 23:59 12/31/2025
# 下周三 10:00 发送提醒邮件
echo 'echo "周三会议提醒" | mail -s "会议通知" user@example.com' | at 10:00 wednesday
# 今晚 12 点重启数据库
echo "shutdown -r now" | at 00:00cron 定时任务(循环执行定时任务)
cron 通过守护进程 crond 运行,默认开机自启,负责周期性检查并执行 /etc/crontab 文件、/etc/cron.d/ 目录下的脚本, 以及用户的定时任务(存储在 /var/spool/cron/ 目录,文件名与用户名一致)
- 常见操作:安装、启动、关闭、查看、设置定时任务
shell
# 安装
yum install crond
# 启动
systemctl start crond
# 重启
systemctl restart crond
# 关闭
systemctl enable crond
# 查看 at 定时任务服务是否开启
systemctl status crond # 或者 ps aux | grep cron
# 基础语法
crontab [选项]
# 选项: 查看、编辑、删除定时任务
-l # 显示当前用户已配置的所有定时任务
-e # 增加、修改定时任务,相当于 vim /etc/cron.d
-r # 删除所有定时任务,慎用!会删除当前用户的所有定时任务,无确认步骤,如果只想删除一个则使用 crontab -e- cron 执行定时任务
shell
# 基础语法(五星)
* * * * * 要执行的 linux 命令
- - - - -
| | | | |
| | | | +--- 星期 (0-6, 0=周日 或 7=周日)
| | | +----- 月份 (1-12)
| | +------- 日期 (1-31)
| +--------- 小时 (0-23)
+----------- 分钟 (0-59)
# 特殊符号
* 星号 代表任意时间,比如:第一个是 *,意思就是一小时中的每一分钟都执行一遍命令
, 逗号 代表不连续的时间,比如:0 8,12,16 * * *,意思就是每天的8点0分,12点0分,16点0分都执行一遍命令
- 减号 代表联系时间范围,比如:0 5 * * 1-6,意思就是周一到周六的凌晨5点都执行一遍命令
*/n 代表每隔多久执行一次,比如:*/10 * * * * ,代表每隔10分钟执行一遍命令
# 示例
* * * * * /home/user/script.sh # 每分钟执行一次 /home/user/script.sh 脚本
0 3 * * * /home/user/backup.sh # 每天凌晨 3 点执行 /home/user/backup.sh 脚本
30 17 * * 5 /home/user/cleanup.sh # 每周五下午 5 点 30 分执行 /home/user/cleanup.sh 脚本
0 0 1,15 * * /home/user/check.sh # 每月 1 日和 15 日的午夜执行 /home/user/check.sh 脚本
10 */1 * * * /home/user/monitor.sh # 每小时的第 10 分钟执行 /home/user/monitor.sh
5 5 * * 2 /sbin/shutdown -r now # 每周二的凌晨 5 点 05 分重启系统
# 设置定时任务
方式一(命令行执行):* * * * * 要执行的 linux 命令
方式二(修改配置文件):vim /etc/crontab ,格式:格式:* * * * * 用户名 执行的命令- 权限控制(白名单和黑名单,控制哪些用户可使用此命令)
shell
ls /etc/ | grep cron # 查看 cron 所有配置文件
vim /etc/cron.deny # 黑名单,禁止使用 cron 的用户列表(默认存在,为空则允许所有用户)
vim /etc/cron.allow # 白名单,允许使用 cron 的用户列表(优先级高于 at.deny)- 注意事项
shell
1. 格式的 5 个选项都不能为空,不确定的使用 * 代表任意时间
2. crontab 定时任务,最小有效时间1分钟,最大时间范围是月,没有秒和年
3. 在定义时间时,日期和时间不要同时出现,否则二者的关系是 or 的关系,不是 and 的福安县
4. 在定时任务中,写命令或者脚本时,必须使用绝对路径,相对有时会报错
5. 天数和星期同时出现,那么定义的时间是并列的,将同时执行
6. 尽量不要把天数设置成30、31天,因为小月份是没有30、31号的将不会执行此命令
7. * 值只能是整数,不可以是小数- 对 系统关机或未运行而错过执行时间的周期性任务 处理(默认即可,无需更改)
shell
# 执行
vim /etc/anacrontab
# 内容如下
RANDOM_DELAY=45 延迟多长时间执行,默认45分钟
START_HOURS_RANGE=3-22 在哪个时间段执行,默认凌晨3点到22点
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly在 linux 中,服务管理主要通过 systemd(CentOS 7+ 默认)或 sysvinit(CentOS 6 及更早版本)实现
systemd(CentOS 7+)
systemd 是新一代初始化系统,通过 systemctl 命令管理服务,配置文件通常位于 /usr/lib/systemd/system/ 或 /etc/systemd/system/。
shell
# 基础语法
systemctl [选项] 服务名
# 基础操作
systemctl start httpd # 启动服务
systemctl stop httpd # 停止服务
systemctl restart httpd # 重启服务
systemctl reload httpd # 重新加载配置(不中断服务)
systemctl status httpd # 查看服务状态,active (running) 运行中,inactive (dead) 已停止
# 开机自启管理
systemctl enable httpd # 设置开机自启
systemctl disable httpd # 关闭开机自启
systemctl enable --now 服务名 # 立即启动并设置开机自启
systemctl is-active httpd # 仅查看是否活跃(active/inactive)
systemctl is-enabled httpd # 查看是否开机自启(enabled/disabled)
# 查看、屏蔽
systemctl list-units --type=service # 查看当前活跃的服务
systemctl list-units --type=service --all | grep 服务名关键词 # 查看所有服务(包括未活跃的),再 grep 过滤
systemctl list-unit-files --type=service # 查看所有服务的开机自启状态
systemctl list-dependencies httpd # 查看服务依赖
systemctl mask httpd # 屏蔽服务(禁止手动 / 自动启动)
systemctl unmask httpd # 取消屏蔽
# 配置文件所在
/usr/lib/systemd/system/ # 系统默认服务,修改后需要再执行 systemctl daemon-reload 才生效
/etc/systemd/system/ # 用户自定义或修改的服务,修改后需要再执行 systemctl daemon-reload 才生效
systemctl daemon-reload # 重新加载配置文件sysvinit(CentOS 6 及更早)
通过 service 和 chkconfig 命令管理,服务脚本位于 /etc/init.d/。
shell
# 基础操作
service httpd start # 启动服务
service httpd stop # 停止服务
service httpd restart # 重启服务
service httpd reload # 重新加载配置(不中断服务)
service httpd status # 查看服务状态,active (running) 运行中,inactive (dead) 已停止
# 开机自启管理
chkconfig httpd on # 设置开机自启
chkconfig httpd off # 关闭开机自启
chkconfig --list httpd # 查看是否开机自启
chkconfig --list # 列出所有服务自启状态
# 查看
systemctl list-units --type=service # 列出所有服务状态,加 --all 显示包括未运行的服务
systemctl list-units --type=service --all | grep 服务名关键词 # 搜索服务
systemctl list-dependencies httpd # 查看服务依赖
# 临时禁用服务
systemctl mask httpd # 禁止手动或自动启动(强制禁用)
systemctl unmask httpd # 解除禁用通用配置
shell
# 服务配置文件路径
多数服务的配置文件在 /etc/服务名/(如 httpd 在 /etc/httpd/)
# 日志查看
服务日志通常在 /var/log/ 目录(如 httpd 日志在 /var/log/httpd/),或通过 journalctl -u 服务名(systemd 系统)查看。
# 手动编写服务
systemd 服务需创建 .service 配置文件(参考 /usr/lib/systemd/system/ 下的示例);sysvinit 需编写 /etc/init.d/ 下的启动脚本。shell
# 基础语法
shutdown [选项] 时间 [警告信息]
# 选项
-c 取消已经执行的shutdown命令
-h 关机
-r 重启
# 示例
shutdown -h now # 立即关机
shutdown -h 18:33 # 到 10:33 关机,如果该时间小于当前时间,则到明天关机
shutdown -h +10 # 10 分钟后自动关机
shutdown -r now # 立即重启
shutdown -r +30 # 30 分钟后重启并发送通知给其他在线用户
shutdown -c # 如果设置了定时关机,可通过此命令取消