进程和计划任务管理 - 实践

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、查看进程
  • 二、进程管理
  • 三、控制进程
  • 四、其他命令
  • 五、计划任务管理
  • 六、crontab周期性任务设置
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

进程和计划任务管理是操作系统中的核心功能,用于控制和优化系统资源的分配与使用。进程管理涉及创建、调度、监控和终止运行中的程序实例,而计划任务管理则负责在特定时间或条件下自动执行预设任务。


提示:以下是本篇文章正文内容,下面案例可供参考

一、查看进程

1.查看进程的方法

使用ps命令查看当前进程,常用组合:

  • ps aux:显示所有用户进程及详细信息(CPU、内存占用等)。

  • ps -ef:以完整格式列出进程,包含父进程ID(PPID)。

结合grep过滤特定进程,例如:

ps aux | grep nginx

2.查看进程的信息

ps 命令

ps(process status)命令用于查看系统中当前运行的进程。它显示了与进程相关的信息,如进程 ID(PID)、用户、CPU 和内存使用率等。

常用选项:

ps -aux:显示所有进程,包括其他用户的进程。

ps -ef:以标准格式显示所有进程。

ps -aux | grep [进程名]:通过管道和 grep 命令过滤进程。

输出字段解释:

USER:进程所属的用户。

PID:进程 ID。

%CPU:进程占用的 CPU 百分比。

%MEM:进程占用的内存百分比。

VSZ:进程使用的虚拟内存(单位 KB)。

RSS:进程使用的物理内存(单位 KB)。

STAT:进程的状态,常见状态有:R(运行)、S(睡眠)、Z(僵尸)、T(停止)等。

START:进程的启动时间。

TIME:进程占用的 CPU 时间。

COMMAND:启动该进程的命令。

详解

STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)。

D:系统守护进程

T:调式、程序执行一般停止

R :该程序目前正在运作,或者是可被运作;

S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。

T :该程序目前正在侦测或者是停止了;

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态D 不可中断状态.

它们含意如下::

<: 表示进程运行在高优先级上

N: 表示进程运行在低优先级上

L: 表示进程有页面锁定在内存中

s: 表示进程是控制进程

l: 表示进程是多线程的

+: 表示当前进程运行在前台

D:系统守护进程

案例:ps -aux | grep vim

查找 vim 进程,并显示它的 CPU 和内存占用情况。

3.动态查看进程信息

top 命令

top 命令用于动态显示 Linux 系统中运行的进程和资源使用情况,实时更新显示。

常用快捷键:

P:按 CPU 使用率排序。

M:按内存使用量排序。

T:按时间排序。

q:退出 top。

输出解释:

PID:进程 ID。

USER:启动该进程的用户。

%CPU:进程占用的 CPU 百分比。

%MEM:进程占用的内存百分比。

TIME+:进程累计使用的 CPU 时间。

COMMAND:执行的命令。

案例:top

启动 top,查看实时的进程和系统资源占用情况。按 P 键查看 CPU 使用率排序,按 M 键查看内存使用情况排序。

4.pgrep命令查询进程信息

常用的参数

-l:选项可同时输出对应的进程名以及PID

-U:选项查询特定用户的进程

-t:选项查询在特定终端运行的进程

例1

pgrep -l "log"

例2

pgrep -l -U teacher -t tty1

[root@localhost ~]# pgrep -l -U "hackli"          

3045 bash

5.pstree命令以树形结构列出进程信息

pstree 命令默认情况下只显示各进程的名称,结合以下常用的参数使用:

-p:选项使用时可以同时列出对应的PID号

-u:选项可以列出对应的用户名

-a:选项可以列出完整的命令信息

执行如下的“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”。

6.Windows系统

  • 通过任务管理器:Ctrl+Shift+Esc打开,查看“详细信息”标签页。
  • 命令行使用tasklist
tasklist | findstr chrome

7.实时监控工具

  • top(Linux/Mac):动态显示进程状态,按q退出。
  • htop(需安装):增强版top,支持交互操作。
  • Windowsperfmon提供性能监控图表。

8.终止进程

  • Linux/Mac:kill -9 [PID](强制终止)。
  • Windows:taskkill /F /PID [PID]

9.查看端口关联进程

  • Linux/Mac:lsof -i :8080
  • Windows:netstat -ano | findstr 8080

二、进程管理

进程管理是操作系统管理进程和资源的关键部分。在 Linux 中,进程是系统中所有任务的核心,进程管理命令主要用于查看、控制和调度系统中的进程。

1. 程序与进程的关系

程序:是存储在硬盘上的可执行代码,像一本书的内容,静态存放在硬盘或其他存储设备上。例

如,你下载并安装的一个应用程序(如 firefox)。

进程:是程序在运行时的实例,像是一本书被人打开并阅读时,它在你眼前执行的过程。每当你运

行一个程序,操作系统会创建一个进程,分配内存和 CPU 时间来执行这个程序。

举例:

程序:你购买的一本电子书,它是存放在你设备里的文件。

进程:你打开这本电子书并开始阅读,操作系统在后台运行着读取文件的程序,显示页面内容。

父进程与子进程

父进程:是创建其他进程的进程,就像一个家长。

子进程:是由父进程创建并执行的独立进程,就像子女一样。

举例:

父进程:一家公司的老板(父进程),负责管理和指挥。

子进程:公司的员工(子进程),执行老板指派的任务。

通过这个例子,父进程和子进程就像公司老板和员工一样,老板负责创建和管理员工,员工独立工作但与老板有密切的联系。

2. 进程的启动方式

1.手工启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否 需要占用

当前的命令终端,手工启动又可以分为前台启动和后台启动。

进程在前台运行

(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。

启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使 用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作。

cp /dev/cdrom /home/cetos7.iso &

2.调度启动

在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指 定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均在后台运行,不会占用用户的命令终端。

进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。

3. 进程的前后台调度

1.Ctrl+Z组合键

当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂

起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行

tar zcvf usr.tar.gz /usr

2.jobs 命令

jobs 命令用于查看当前会话中运行的后台任务。

常用选项:

jobs -l:列出当前所有后台任务及其进程 ID。

案例:

将后台的进程恢复运行

使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;

使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。

除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作

为参数。例如,执行如下的“fg 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行。

[root@localhost ~]# jobs
[1]-   Stopped                 cp /dev/cdrom mycd.iso
[2]+ Stopped                 top
[root@localhost ~]# fg 1

查看当前终端会话中的后台任务。

fg 和 bg 命令

fg:将后台任务带回前台执行。

bg:将暂停的任务放回后台继续执行。

案例:

fg %1

将后台任务编号为 1 的任务带回前台。

bg %2

将后台任务编号为 2 的任务恢复在后台运行。

4.终止进程的运行

1.Ctrl+C组合键

中断正在执行的命令

2.kill 命令

kill 命令用于发送信号给进程,通常用来终止进程。

常用选项:

kill [PID]:正常终止进程。

kill -9 [PID]:强制终止进程(不可恢复)。

案例:

kill 1234

终止 PID 为 1234 的进程。

kill -9 1234

强制终止 PID 为 1234 的进程。

8.3 killall 命令

killall 命令根据进程名称终止进程。

案例:

killall vim

终止所有名为 vim 的进程。

pkill 命令

pkill 命令根据进程属性(如用户名、终端等)终止进程。

案例:

pkill -u root

[root@localhost ~]# pkill -9 -U "hackli"

终止所有由 root 用户启动的进程。

三、控制进程

进程控制方法

1.使用任务管理器(Windows)

在Windows系统中,任务管理器是最直接的进程控制工具。通过快捷键Ctrl + Shift + EscCtrl + Alt + Del打开任务管理器,切换到“进程”选项卡。右键点击目标进程,可选择“结束任务”、“重启”或调整优先级。任务管理器还提供CPU、内存和磁盘占用率的实时监控。

2.终端命令(Linux/macOS)

Linux和macOS系统可通过终端命令控制进程。常用命令包括:

  • ps aux:列出所有运行中的进程及其详细信息。
  • kill -9 [PID]:强制终止指定PID的进程。
  • pkill [进程名]:通过名称终止进程。
  • nicerenice:调整进程优先级。

3.编程接口(Python示例)

Python的ossubprocess模块可用于进程控制:

import os
import subprocess
# 启动进程
process = subprocess.Popen(["python", "script.py"])
# 终止进程
os.kill(process.pid, 9)

4.进程优先级调整

Windows系统
在任务管理器的“详细信息”选项卡中,右键点击目标进程,选择“设置优先级”,可调整为“实时”、“高”、“正常”或“低”。需注意高优先级可能导致系统不稳定。

Linux系统
使用nice命令启动进程时指定优先级(范围-20到19,值越低优先级越高):

nice -n -10 ./high_priority_process

运行中的进程可通过renice调整:

renice -n -5 -p [PID]

5.后台进程管理

nohup与&(Linux/macOS)
使用nohup&将进程放入后台并忽略挂断信号:

nohup ./long_running_process > output.log 2>&1 &

tmux/screen
终端复用工具如tmuxscreen可创建持久会话,即使断开连接也能保持进程运行:

tmux new -s session_name
./start_process
Ctrl+B D  # 分离会话
tmux attach -t session_name  # 重新连接

6.进程监控工具

htop(Linux/macOS)
htop是交互式进程查看器,支持颜色标记、树状展示和直接键盘操作(如终止进程或调整优先级)。安装命令:

sudo apt install htop  # Debian/Ubuntu
brew install htop     # macOS

Windows资源监视器
在任务管理器的“性能”选项卡中点击“打开资源监视器”,可查看详细的CPU、内存、磁盘和网络占用情况,并支持直接结束进程。

7.自动化脚本示例

Bash脚本监控进程
以下脚本检查指定进程是否运行,若不存在则启动:

#!/bin/bash
process_name="target_process"
if ! pgrep -x "$process_name" > /dev/null; then
/path/to/$process_name &
fi

8.Python守护进程

使用Python的daemon模块创建守护进程:

import daemon
from time import sleep
def run():
while True:
sleep(1)
with daemon.DaemonContext():
run()

四、其他命令

我们可以继续详细解析这些命令,提供更多的实例和解释,帮助您更好地掌握它们的使用。

1. date

功能:

date 命令用于显示当前的系统日期和时间,可以指定不同的输出格式,或用它来设置系统的日期和时间。

详细案例:

显示当前系统时间:

date

输出:Wed Aug 14 16:24:51 UTC 2025

自定义时间格式:

date "+%Y-%m-%d %H:%M:%S"

输出:2025-08-14 16:24:51

显示当前时间的时间戳(从1970年1月1日以来的秒数):

date +%s

输出:1692017091

设置系统时间:

sudo date +%Y-%m-%d -s "2025-08-14"

这会将系统日期设置为 2025年8月14日。

2. cal

功能:

cal 命令用来显示当前月份或指定月份的日历。可以方便地查看日期。

详细案例:

查看当前月份的日历:

cal

输出(假设当前为2025年8月):

August 2025

Su Mo Tu We Th Fr Sa

                1 2

3 4 5 6 7 8 9

10 11 12 13 14 15 16

17 18 19 20 21 22 23

24 25 26 27 28 29 30

31

查看指定年份和月份的日历:

cal 12 2025

输出:查看2025年12月的日历。

显示一整年的日历:

cal -y 2025

输出:显示2025年全年日历。

3. history

功能:

history 命令用来查看当前用户的历史命令。这个命令可以帮助你快速找到之前运行的命令。

详细案例:

查看命令历史:

history

输出示例:

1 ls

2 cd /home/user

3 mkdir new_folder

4 history

查看历史命令中的特定条目:

history | grep "mkdir"

这会过滤出历史记录中所有包含 mkdir 的命令。

执行历史命令:

使用历史命令编号执行:

!2

这会执行编号为2的命令,即 cd /home/user。

4. scp

功能:

scp 命令用于通过 SSH 协议在本地和远程服务器之间安全地复制文件或目录。它加密了数据传输,因此更加安全。

详细案例:

将本地文件复制到远程服务器:

scp file.txt user@remote:/path/to/destination/

这会将 file.txt 文件从本地复制到远程服务器的 /path/to/destination/ 目录。

将本地目录复制到远程服务器:

scp -r /local/dir/ user@remote:/remote/dir/

这会将本地目录 /local/dir/ 及其内容复制到远程目录 /remote/dir/。

将远程文件复制到本地:

scp user@remote:/remote/path/to/file.txt /local/destination/

从远程服务器复制整个目录到本地:

scp -r user@remote:/remote/dir /local/dir/

5. rsync

功能:

rsync 是一个非常强大的文件同步工具,支持增量同步,减少了文件传输的时间和带宽消耗。它可以同步文件和目录,不仅可以在本地计算机之间同步,也支持远程同步。

详细案例:

将本地目录同步到远程服务器:

rsync -avz /local/dir/ user@remote:/remote/dir/

参数说明:

-a:归档模式,表示保持文件的所有属性(如权限、时间戳等)。

-v:详细模式,显示传输过程中的文件。

-z:启用压缩传输。

将远程目录同步到本地:

rsync -avz user@remote:/remote/dir/ /local/dir/

同步文件时,排除某些文件:

rsync -avz --exclude="*.log" /local/dir/ user@remote:/remote/dir/

这会排除所有 .log 后缀的文件。

仅同步文件变化:

rsync -avz --ignore-existing /local/dir/ user@remote:/remote/dir/

这会跳过远程目录中已经存在的文件,只同步新的或修改过的文件。

6. ssh

功能:

ssh(Secure Shell)命令用于通过加密连接远程登录到计算机。它使得你可以安全地访问远程机器并执行命令。

详细案例:

登录到远程服务器:

ssh user@hostname

这会连接到远程主机 hostname 上的 user 用户。

使用不同端口登录:

ssh -p 2222 user@hostname

通过 -p 选项指定端口,默认端口是 22。

通过 SSH 执行远程命令:

ssh user@hostname 'ls -l /home/user'

这会在远程主机上执行 ls -l /home/user 命令,列出指定目录的内容。

7. nohup

功能:

nohup 命令用于让某个进程在后台运行,并且使其在关闭终端后依然保持运行。nohup 会将标准输出和错误输出重定向到 nohup.out 文件中。

详细案例:

让脚本在后台运行:

nohup python script.py &

这会使 script.py 脚本在后台运行,即使终端关闭,脚本也会继续执行。

查看后台任务的输出:

tail -f nohup.out

这会实时查看后台任务的输出。

8. reboot

功能:

reboot 命令用于重启计算机。在一些场景中需要重新启动计算机以应用更新或其他操作。

详细案例:

重启计算机:

sudo reboot

这会立即重启计算机。

重启并延迟几分钟:

sudo reboot +5

这会在5分钟后重启计算机。

9. shutdown

功能:

shutdown 命令用于关闭计算机。它可以指定一个延迟时间,或者立即关闭系统。

详细案例:

立即关闭系统:

sudo shutdown -h now

这会立即关闭计算机。

延迟关闭系统:

sudo shutdown -h +10

这会在10分钟后关闭系统。

重启系统:

sudo shutdown -r now

这会立即重启计算机。

10. free命令

用于显示系统的内存使用情况,包括物理内存(RAM)、交换空间(swap)和内核缓冲区。它是 Linux系统中非常常用的一个命令,用于查看内存的总体状态。

命令功能

free 命令提供以下几个主要信息:

1. 总内存:物理内存的总量。

2. 已用内存:已经被系统或应用程序使用的内存。

3. 空闲内存:没有被使用的内存。

4. 共享内存:不同进程之间共享的内存空间。

5. 缓存内存:操作系统用作缓存的数据。

6. 交换内存(Swap):当物理内存不足时,系统使用磁盘上的空间作为虚拟内存(交换空间)。

基本命令格式

free [options]

常用选项

-h:以人类可读的方式显示(自动选择合适的单位,如 KB, MB, GB)。

-m:以 MB 为单位显示内存。

-g:以 GB 为单位显示内存。

-t:显示内存的总和(即总内存 + 总交换空间)。

-s:以秒为单位指定显示刷新时间间隔。

-l:显示低内存和高内存的详细信息。

基本用法

1. 显示当前内存使用情况:

free

输出示例:

          total       used       free     shared buff/cache  

available

Mem:           16G         4.2G       7.8G       345M       4.0G        

11G

Swap:           8.0G       0.0K       8.0G

解释:

total:总内存。

used:已用内存。

free:空闲内存。

shared:被多个进程共享的内存。

buff/cache:系统缓冲区和缓存使用的内存。

available:可以用来启动新应用程序的内存(考虑了缓存和缓冲的回收)。

2. 以人类可读的格式显示内存:

free -h

输出示例:

total       used       free     shared buff/cache  

available

Mem:           16G         4.2G       7.8G       345M       4.0G        

11G

Swap:           8.0G       0.0K       8.0G

3. 显示内存使用情况(以 MB 为单位):

free -m

输出示例:

      total       used       free     shared buff/cache  

available

Mem:         16384       4292       8192         345       4096      

11264

Swap:         8192           0       8192

4. 显示内存和交换空间的总和:

free -t

输出示例:

          total       used       free     shared buff/cache  

available

Mem:         16384       4292       8192         345       4096      

11264

Swap:         8192           0       8192

Total:       24576       4292       16384         345       4096      

11264

5. 每 5 秒刷新一次显示内存使用情况:

free -s 5

这会每5秒钟更新一次内存的使用情况,直到手动终止(按 Ctrl+C)。

输出字段解释

free 命令的输出通常包含两行:一行显示内存(Mem),一行显示交换空间(Swap)。

Mem 行:

total:总物理内存(RAM)。

used:已用内存(包括缓存、共享内存、应用程序使用的内存等)。

free:空闲内存。

shared:共享内存,指多个进程之间共享的内存。

buff/cache:缓冲区和缓存所占用的内存。系统会使用这部分内存来缓存磁盘数据,以加快

访问速度。

available:系统可用的内存。这个值并不是单纯的空闲内存,而是指经过系统缓存和缓冲

区回收后的可以使用的内存。

Swap 行:

total:总交换空间大小。

used:已使用的交换空间。

free:剩余的交换空间。

典型应用场景

1. 检查内存使用情况:

你可以通过 free 命令快速了解当前系统的内存使用情况,帮助你判断是否有内存不足的情况,或

者是否需要调整交换空间。

2. 监控内存和交换空间使用情况:

如果系统经常使用大量的交换空间,可能意味着系统内存不足,可能需要增加物理内存或调整系统

配置。

3. 检查缓冲区和缓存的影响:

通过 buff/cache 和 available 字段,你可以了解系统缓存占用了多少内存,以及哪些内存是可

以被回收利用的。

高级技巧

1. 查看内存使用趋势:

如果你需要实时监控内存使用情况并保存到文件中,可以结合 free 和 watch 命令:

watch -n 1 free -h

这会每秒刷新一次显示内存使用情况。

2. 使用 free 监控系统健康状态:

监控内存是否充足。

判断是否有大量的缓存内存导致可用内存减少。

如果交换空间使用量较大,考虑优化内存使用或增加物理内存。

free 命令是查看内存和交换空间使用情况的非常实用工具,尤其在 Linux 系统管理中频繁使用。通过它,您可以迅速了解系统内存的总体状况,帮助您优化系统性能或解决内存不足的问题。

11.总结

这些命令在 Linux 系统管理中非常常见,它们帮助用户进行日常任务管理,比如文件操作、系统管理、远程连接、任务管理等。掌握这些命令将极大提升您在终端操作中的效率。

五、计划任务管理

at一次性任务设置

计划任务用于自动执行系统中的任务。Linux 中常用的计划任务工具包括 at 和 cron。

1.一次性任务:at 命令

at 命令用于设置一次性任务,任务将在指定时间执行。

命令格式:

at [HH:MM] [yyyy-mm-dd]

at> [要执行的命令]

常用选项:

atq:列出待执行的任务。

atrm [任务编号]:删除指定的任务。

案例:

at 16:30 2021-08-16

at> echo "Backup completed" > /tmp/backup.log

at> <EOT>

设置任务在指定时间执行,并将输出保存到 /tmp/backup.log 文件中。

2.一次性任务设置方法

1.使用crontab命令

在Linux系统中,可以通过crontab设置一次性任务。使用at命令更直接:

echo "command_to_execute" | at 14:30 2023-12-31

command_to_execute替换为需要运行的命令,14:30 2023-12-31指定具体执行时间。

2.Windows任务计划程序

打开任务计划程序,创建基本任务。选择“一次性”触发器,设置日期和时间。在操作中选择启动程序或脚本,配置完成后保存。

3.Python脚本定时执行

利用schedule库实现一次性任务:

import schedule
import time
def job():
print("Task executed")
return schedule.CancelJob
schedule.every().day.at("14:30").do(job)
while True:
schedule.run_pending()
time.sleep(1)

任务执行后自动取消后续调度。

4.第三方工具(如Tasker)

在移动设备上,Tasker等应用支持设置一次性任务。创建新任务,选择触发条件为特定时间,配置操作后保存。

5.注意事项
  • 确保系统时间准确,避免时区问题。
  • 任务执行时需有足够权限。
  • 验证任务是否按预期触发,可通过日志或输出确认。

六、crontab周期性任务设置

1.周期性任务:cron 命令

cron 用于设置定期执行的任务。用户可以通过 crontab 命令编辑和管理自己的计划任务。

命令格式:

* * * * * [command]

每个字段的取值范围:分钟(0-59),小时(0-23),日期(1-31),月份(1-12),星期(0-6,0 为周日)。

[command]:要执行的命令。

由于各字段的作用不同,其取值范围也不一样,如表 9-2 所示,当使用“*”时表示取值范围中的任意时间。

crontab 任务配置记录中所设置的命令操作将在“分钟”+“小时”+“日期”+ “月份”+“星期”都满足的条件下执行。

表 9-2 crontab 计划任务的配置字段说明

分钟 取值为 0~59 的任意整数

小时 取值为 0~23 的任意整数

日期 取值为 1~31 的任意整数(日期在该月份中必须有效)

月份 取值为 1~12 的任意整数

星期 取值为 0~7 的任意整数,0 或 7 代表星期日

命令 可以是普通的命令,也可以是自己编写的程序脚本

除了“*”以外,还可以使用“-”(减号)、“,”(逗号)、“/”(斜杠)与数字构成表达式来表 示较复杂的时间关系。

减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。

逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。

斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。

常用命令:

crontab -e:编辑当前用户的 cron 任务。

crontab -l:列出当前用户的 cron 任务。

crontab -r:删除当前用户的所有 cron 任务。

其他命令

设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。

-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。

下面将分别讲解 crontab 命令相关选项的使用。

crontab -u 用户名 #指定XX用户的cron服务

crontab -u zx -l #列出zx用户下的cron的详细内容

crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容

crontab -r -u zx #删除zx用户的cron内容

案例:

50 7 * * * /usr/bin/systemctl start sshd.service

50 22 * * * /usr/bin/systemctl stop sshd.service

每天的 7:50 启动 sshd 服务,22:50 停止 sshd 服务。

2.cron 服务管理

启动 cron 服务:

查看 cron 服务状态:

启用 cron 服务开机启动:

扩充 生产案列

50 7 * * * /usr/bin/systemctl start sshd.service

50 22 * * * /usr/bin/systemctl stop sshd.service

systemctl start crond

systemctl status crond

systemctl enable crond

扩充 生产案列

例如,若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上 7:50

自动开启 sshd 服务,22:50 关闭 sshd 服务;②每隔五天清空一cron 次 FTP 服务器公共目录

/var/ftp/pub 中的数据;③每周六的 7:30 重新启动系统中的 httpd 服务;④每周一、周三、周五的下午

17:30,使用 tar 命令自动备份/etc/httpd 目录,则可由 root 用户通过 crontab 设置以下计划任

务。

[root@localhost ~]# crontab -e

50 7 * * * /usr/bin/systemctl start sshd.service

50 22 * * * /usr/bin/systemctl stop sshd.servic

0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*

30 7 * * 6 /usr/bin/systemctl httpd restart

30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/

*/2 * * * * ls -lh /home/*

普通用户执行“crontab -e”命令时,可以设置自己的计划任务(需要注意命令的执行权限)。

例如,用户 jerry 设置一条计划任务:在每周日晚上的 23:55 将/etc/passwd 文件的内容复制到宿主目

录中,保存为 pwd.txt 文件,具体操作如下:

[jerry @localhost ~]# crontab -e

55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt

因各条计划任务在执行时并不需要用户登录,所以任务配置记录中的命令建议使用绝对路径,以避免因缺少执

行路径而无法执行命令的情况。另外,在设置非每分都执行的任务时,   “分钟”字段也应该填写一个具体的

时间数值,而不要保留为默认的“*”,否则将会在每分钟执行一次计划任务。

(2)查看用户的计划任务列表

crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选

项查看其他用户的计划任务,具体操作如下:

[root@localhost ~]# crontab –l //查看用户root 自己的计划任务

50 7 * * * /usr/bin/systemctl start sshd.service

50 22 * * * /usr/bin/systemctl stop sshd.servic

0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*

30 7 * * 6 /usr/bin/systemctl httpd restart

30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/

[root@localhost ~]# crontab -l -u jerry //查看用户jerry 的计划任务

55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt

[root@localhost ~]# ls -l /var/spool/cron/jerry

-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/jerry

(3)删除用户的计划任务列表

当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任

务,可以执行“crontab -r”命令。

[jerry@localhost ~]$ crontab -r //用户jerry 清空自己设置的计划任务

[jerry@localhost ~]$ crontab -l

[jerry@localhost ~]$ crontab -l

no crontab for jerry

案列

21 17 * * * /usr/bin/systemctl reboot

26 17 * * * /usr/bin/cp -r /etc/ /home/

#0 8-18/2 * * * /usr/binsystemctl start vsfrpd.service

0 * */3 * * /usr/bin/rm -rf /var/log/ftp/*.log

*/2 * * * * /usr/bin/systemctl start vsfrpd.service

[root@192 home]# crontab -l -u lisi

17 19 * * * /usr/bin/cp -r /home/etc/ /home/lisi/backup/

journalctl -xe

3.基本语法格式

crontab 的语法由五个时间字段和一个命令字段组成,格式如下:

* * * * * command_to_execute

五个星号分别代表:

  1. 分钟(0-59)
  2. 小时(0-23)
  3. 日期(1-31)
  4. 月份(1-12)
  5. 星期(0-7,0和7都代表星期日)

4.特殊符号用法

  • 星号(*):匹配所有可能值。例如在小时字段使用 * 表示每小时。
  • 逗号(,):指定多个值。例如 1,15 * * * * 表示每小时的第1和第15分钟。
  • 连字符(-):指定范围。例如 0 9-17 * * * 表示上午9点到下午5点每小时执行。
  • 斜杠(/):指定间隔频率。例如 */5 * * * * 表示每5分钟执行一次。

常用示例

每天凌晨3点执行脚本:

0 3 * * * /path/to/script.sh

每周一上午9点30分执行任务

30 9 * * 1 /path/to/command

每10分钟执行一次监控脚本:

*/10 * * * * /path/to/monitor.sh

每月1日和15日中午12点执行备份:

0 12 1,15 * * /path/to/backup.sh

5.用户级与系统级配置

编辑当前用户的 crontab:

crontab -e

查看当前用户的 crontab 列表:

crontab -l

  • 系统级 crontab 通常位于 /etc/crontab 或 /etc/cron.d/ 目录,需要 root 权限编辑。

6.环境变量问题

crontab 执行时不会加载用户的环境变量(如 $PATH),建议:

  1. 在脚本中使用绝对路径。
  2. 在 crontab 文件顶部声明变量:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

7.日志与调试

查看执行日志(系统日志路径可能不同):

tail -f /var/log/syslog | grep CRON

重定向输出到日志文件:

* * * * * /path/to/command >> /var/log/cron.log 2>&1

8.注意事项

  1. 脚本需具有可执行权限(chmod +x script.sh)。
  2. 避免任务执行时间重叠,可能导致资源竞争。
  3. 复杂的任务建议封装为脚本,crontab 仅调用脚本。

    总结

    提示:这里对文章进行总结:

    posted @ 2025-08-26 08:53  yjbjingcha  阅读(18)  评论(0)    收藏  举报