Linux--进程和计划任务管理(ps、top、pgrep、pstree、at、crontab命令)

一、程序,进程,线程之间的关系

1.1 程序

  • 保存在硬盘,光盘等介质中的可执行代码和数据

  • 静态保存的代码

1.2 进程

  • 在CPU及内存中运行的程序代码

  • 动态执行的代码

  • 父.子进程:每个进程可以创建一个或多个进程,是一个依赖关系。

1.3 线程

  • 操作系统能够进行运算调度的最小单位。
  • 包含在进程之中,是进程中的实际运作单位。
  • 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

举例
以一个工厂结构举例

应用程序=工厂

进程=车间

线程=工人

高并发处理→依赖于多线程操作

二、查看进程

2.1 查看进程信息 ps命令

  • (Processes Statistic)查看静态的进程统计信息

ps命令基本格式
ps [选项]
注意:有一些选项时不带“-”前缀的(添加“-”前缀后含义可能会有出入)

常用选项:
a 显示当前终端下的所有进程信息,包括其他用户的进程、与“x”选项结合时将显示系统中所有的进程信息
u 使用以用户为主的格式输出进程信息
x 显示当前用户在所有终端下的进程信息
-e 显示系统内的所有进程信息
-l 使用长(Long)格式显示进程信息
-f 使用完整的(Full)格式显示进程信息

执行不带任何选项的ps命令时,将只显示当前用户会话中打开的进程
[root@localhost ~]# ps
   PID TTY          TIME CMD
  2711 pts/0    00:00:00 bash
  2946 pts/0    00:00:00 ps

ps aux命令 以简单列表的形式显示出进程信息

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 193812  7016 ?        Ss   08:52   0:01 /usr/lib/systemd/systemd --sw
root          2  0.0  0.0      0     0 ?        S    08:52   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:52   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   08:52   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    08:52   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    08:52   0:00 [rcu_bh]

... ...

root      11273  0.0  0.0      0     0 ?        S    10:00   0:00 [kworker/3:2]
root      11291  0.0  0.0      0     0 ?        S    10:01   0:00 [kworker/u256:1]
root      11378  0.0  0.0      0     0 ?        S    10:10   0:00 [kworker/u256:2]
root      11400  0.0  0.0      0     0 ?        S    10:11   0:00 [kworker/3:1]
root      11426  0.0  0.0 107952   620 ?        S    10:14   0:00 sleep 60
root      11427  0.0  0.0 155360  1888 pts/0    R+   10:14   0:00 ps aux

在这里插入图片描述

  • 上述输出信息中,每一列称为字段或者列或者属性

  • 上述输出信息中,第一行为列表标题,其中个字段的含义如下

    • USER: 启动该进程的用户账号信息
    • PID: 该进程在系统中的数字ID号,在当前系统中是唯一的
    • %CPU:CPU占用的百分比
    • %MEN:内存占用的百分比
    • VSZ:占用虚拟内存(SWAP)的大小
    • RSS:占用常驻内存(物理内存)的大小
    • TTY: 表明该进程在哪个终端上运行。“?”表示未知或者不需要终端
    • SATA: 显示了进程当前的状态,如S(休眠),R(运行),Z(僵死),<(高优先级),N(低优先级),s(父进程),+(前台进程),l(多线性进程),D(不可休眠进程)对处于僵死状态的进程应该予以手动终止
    • START: 启动该进程的时间
    • TIME: 该进程占用CPU时间
    • COMMAND: 启动该进程的命令的名称

ps -elf 命令:以长格式显示系统中的进程信息

[root@localhost ~]# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 48453 ep_pol 08:52 ?        00:00:01 /usr/lib/systemd/s
1 S root          2      0  0  80   0 -     0 kthrea 08:52 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 08:52 ?        00:00:00 [ksoftirqd/0]

......

1 S root      11478      2  0  80   0 -     0 worker 10:20 ?        00:00:00 [kworker/u256:0]
0 S root      11490   8990  0  80   0 - 26988 hrtime 10:20 ?        00:00:00 sleep 60
1 S root      11491      2  0  80   0 -     0 worker 10:20 ?        00:00:00 [kworker/3:0]
0 R root      11492  10481  0  80   0 - 38840 -      10:20 pts/0    00:00:00 ps -elf

PPID:表示对应进程的父进程的PID号

PRI:用户态优先级(人为)

NI: nice值,内核态优先级,取值范围(-20~19),值越小,优先级越高

ADDR:若是 - ,代表正在运行

SZ:在swap交换分区的容量

WCHAN:当前进程在内核中的名称

STIME:启动时间

由于系统中运行的进程数量较多,需要查询某一个进程的信息时可以结合管道操作和
grep 命令进行过滤。

例如,执行以下操作可以过滤出包含“bash”的进程信息。

[root@localhost ~]# ps aux | grep bash
root       8990  0.0  0.0 115304   960 ?        S    08:52   0:00 /bin/bash /usr/sbin/ksmtuned
root      10481  0.0  0.0 116652  3272 pts/0    Ss   08:52   0:00 -bash
root      11527  0.0  0.0 112728   984 pts/0    S+   10:24   0:00 grep --color=auto bash

在这里插入图片描述

2.2 动态查看 top命令

  • 使用ps命令查看到的是一个静态的进程信息,并不能连续的反馈出当前进程的运行状态

  • top命令将会在当前终端以全屏交互式的界面显示进程排名,及时跟踪包括CPU,内存等系统资源占用情况

  • 默认情况下每三秒刷新一次
    作用类似于Windows系统中的任务管理器

[root@localhost ~]# top
top - 11:45:23 up  2:50,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 211 total,   1 running, 210 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861508 total,  2762280 free,   458356 used,   640872 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3080984 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                  
 12460 root      20   0  162012   2356   1596 R   0.3  0.1   0:00.11 top                      
     1 root      20   0  193812   7016   4176 S   0.0  0.2   0:01.72 systemd                  
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                 
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0              
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H             
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 migration/0              
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                   
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.40 rcu_sched                
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain            
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.05 watchdog/0               
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 watchdog/1               
    13 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/1              
    14 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/1              
    16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H             
    17 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 watchdog/2               
    18 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/2              
    19 root      20   0       0      0      0 S   0.0  0.0   0:00.05 ksoftirqd/2              
    21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H             
    22 root      rt   0       0      0      0 S   0.0  0.0   0:00.69 watchdog/3               
    23 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/3              
    24 root      20   0       0      0      0 S   0.0  0.0   0:00.03 ksoftirqd/3              
    26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H             
    28 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs              

在这里插入图片描述
上述输出信息中,开头的部分显示了系统任务(Tasks),CPU占用,内存占用(Mem),交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息含义如下

  • 系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping。休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数

  • CUP占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的CPU百分比,主要是看%id部分

  • 内存占用(Mem)信息:total,总内存空间;used,已用内存空间;free,空闲内存空间;buffers,缓存区域

  • 交换空间(Swap)占用:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间

操作选项

M:以内存大小排序

c:以CPU占用排序

h:top程序在线帮助信息

q:退出

2.3 查询进程信息 pgrep 命令

  • 根据进程的名称、运行该进程的用户、进程所在的终端等多种属性查询特定进程的PID 号
  • 通过pgrep命令可以指定进程的一部分名称进行查询,
  • -l 选项可以同时输出对应的进程名
    -U 查询特定用户的进程
    -t 选项查询在特定终端运行的进程

例如,若要查询进程名中包含“log”的进程及其 PID 号

[root@localhost ~]# pgrep -l "log"
4419 xfs-log/dm-0
7648 xfs-log/sda1
8763 xfs-log/dm-2
8766 xfs-log/dm-3
8887 systemd-logind
8900 abrt-watch-log
8907 abrt-watch-log
9528 rsyslogd

例如:查询由用户 teacher 在 tty2 终端上运行的进程及 PID 号

[root@localhost ~]# pgrep -l -U teacher -t tty2
6098 bash
6144 vim

2.4 查看进程树 pstree 命令

  • pstree命令以属性结构列出进程信息,可以更直观的判断各进程的相互关系(父,子进程)

  • pstree命令默认情况下只显示各进程的名称

“-p”选项,列出对应的PID号

“-u”选项,列出对应的用户名

“-a”选项,列出完整的命令信息

[root@localhost ~]# pstree -aup		'//查看当前系统的进程树(包括各进程对应的PID号,用户名,完整命令等信息)'
systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,601
  │   ├─{ModemManager},631
  │   └─{ModemManager},635
  ├─NetworkManager,667 --no-daemon
  │   ├─dhclient,791 -d -q -sf /usr/libexec/nm-dhcp-helper -pf...
  │   ├─{NetworkManager},676
  │   └─{NetworkManager},678
..省略部分信息
查看用户yang打开的进程及子进程的树结构
[root@localhost ~]# pstree -ap yang		

三、控制进程

3.1 进程的启动方式

3.1.1 手工启动

  • 前台启动:用户输入命令,直接执行程序
  • 后台启动:在命令行尾加入“&”符号
[root@localhost ~]# cp /dev/cdrom mycd.iso&		'//在后台运行复制镜像文件进程'
[1] 3227		'//输出信息中心包括后台任务序号,PID号'

3.1.2 调度启动

  • 使用at命令,设置一次性任务(如 12:30重启网络服务)
  • 使用crontab命令,设置周期性计划任务(如 每周六18:00 备份数据库)

3.2 改变进程的运行方式

3.2.1 挂起当前进程 Ctrl+Z 组合键

将当前进程挂起,即调入后台并停止执行(对于速度缓慢,会耽误其他操作的进程使用)

例如:
在使用 wget 命令下载 Firefox 软件包时,发现下载速度缓慢,为了不耽误其他操作,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行,代码如下:

[root@localhost ~]# wget ftp://173.17.17.13/firefox-3.6.13.tar.bz2
--12:55:24-- ftp://173.17.17.13/firefox-3.6.13.tar.bz2
        => 'firefox-3.6.13.tar.bz2.1' 
Connecting to 173.17.17.13:21… 已连接. 
正在以 anonymous 登录 … 登录成功!
==> SYST … 完成.	==> PWD … 完成.
==> TYPE I … 完成. ==> 不需要 CWD.
==> SIZE firefox-3.6.13.tar.bz2 … 9437184
==> PASV … 完成.	==> RETR firefox-3.6.13.tar.bz2 … 完成. 
长度:9437184 (9.0M)
0% [	]0	--.- k/s
  '//按Ctrl+Z 组合键'
[1]+   Stopped	wget ftp://173.17.17.13/firefox-3.6.13.tar.bz2

3.2.2 查看后台进程 jobs 命令

  • 查看处于后台的任务列表。
  • 结合“-l”选项可以同时显示出该进程对应的PID号
  • 输出结果中,每一行记录对应一个后台进程的状态信息,行首的数字代表该进程在后台的任务编号。
  • 若当前终端没有后台进程,将不会显示任何信息

例如:
执行如下的“jobs -l”命令可以看到前面挂起的 wget 下载任务的相关信息。

[root@localhost ~]# jobs -l
[1]+ 28584 停 止 wget ftp://173.17.17.13/firefox-3.6.13.tar.bz2

3.2.3 将后台的进程恢复运行 fg 命令

  • 将后台进程恢复到前台运行,可以指定任务序号
  • bg(BackGround)命令可以将后台中暂停执行的任务恢复运行,继续在后台执行操作
  • fg(ForeGround)命令可以将后台任务恢复到前台运行
  • 除非后台任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数

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

[root@localhost ~]# fg 1
wget ftp://173.17.17.13/firefox-3.6.13.tar.bz2
…… //省略部分信息

3.3 3.终止进程执行

  • Ctrl + C组合键:中断正在执行的命令
  • Ctrl + C组合键无法中止后,可以使用专门的进程中止工具 kill,killall,pkill

3.3.1 使用kill命令终止进程

  • kill命令需要使用进程的PID号作为参数

  • 若进程无法响应,可结合“-9”选项强行中止进程。强行中止进程可能会到时部分数据丢失,谨慎使用!

例如:
若 SSH 服务的 sshd 进程的 PID 号为 5822,则执行“kill 5822”命令后可以将进程 sshd 终止,具体操作如下:

[root@localhost ~]# pgrep -l "sshd"	'//查询目标进程的PID 号'
5822 sshd
[root@localhost ~]# kill 5822	'//终止指定PID 的进程'
[root@localhost ~]# pgrep -l "sshd"	'//确认进程已终止(查询时无结果)'

例如:
以下操作展示了强制终止 vim 进程的过程。

[root@localhost ~]# vim tmpfile	'//打开vim 程序并挂起作为测试'
[1]+   Stopped	vim tmpfile
[root@localhost ~]# jobs –l	'//查询目标进程的PID 号'
[1]+   7095 Stopped	vim tmpfile
[root@localhost ~]# kill 7095		'//尝试正常结束进程'
[root@localhost ~]# jobs -l			'//但发现vim 进程并未退出'
[1]+   7095 Stopped	vim tmpfile
[root@localhost ~]# kill -9 7095		'//强制终止目标进程'
[root@localhost ~]# jobs -l		'//成功终止vim 进程'
[1]+ 2993  已 杀死	vim tmpfile

3.2.2 使用killall命令终止进程

  • killall命令通过进程名来中止进程,可终止指定名称所有进程(可理解为终止进程树)
  • killall命令同样有“-9”选项,强制终止进程

例如:
执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止。

[root@localhost ~]# vim testfile1	//挂起第 1 个 vim 测试进程
[1]+   Stopped	vim testfile1
[root@localhost ~]# vim testfile2	//挂起第 2 个 vim 测试进程
[2]+   Stopped	vim testfile2
[root@localhost ~]# jobs -l		//确认待终止的进程信息
[1]-   7144 Stopped	vim testfile1
[2]+   7153 Stopped	vim testfile2
[root@localhost ~]# killall -9 vim	//通过进程名终止多个进程
[root@localhost ~]# jobs -l
[1]-   7144 Killed	vim testfile1
[2]+   7153 Killed	vim testfile2

3.2.3 使用 pkill 命令终止进程

  • 根据特定条件终止相应的进程

常用命令选项:
-U:根据进程所属的用户名终止相应的进程
-t:根据进程所在的终端终止相应的进程

例如:
若要终止由用户 hackli 启动的进程(包括登录 Shell),可以执行以下操作。

[root@localhost ~]# pgrep –l -U "hackli"	//确认目标进程相关信息3773 bash
[root@localhost ~]# pkill -9 -U "hackli"	//强行终止用户hackli 的进程
[root@localhost ~]# pgrep -l -U "hackli"	//确认目标进程已被终止

四、at一次性任务设置

  • CentOS7系统中的计划任务是由at,cronie软件包提供,通过atd和crond这两个系统服务实现一次性,周期性的计划任务功能,并分别通过at,crontab命令进行计划任务设置
  • 开启系统服务atd是at命令设置的计划任务的前提条件

4.1 at命令基本格式

at [HH:MM] [yyyy-mm-dd] at 时:分 年-月-日

4.2 at命令使用顺序

  • 查看时间–>设置时间–>输入命令–>Ctrl + D提交任务

  • date:查看当前时间。设置任务,时间不可在当前时间之前

  • 命令输入完成后按 Ctrl + D组合键提交任务即可

[root@localhost ~]# date		'//查看当前时间'
2019年 11月 13日 星期三 00:45:58 CST
[root@localhost ~]# at 00:48 2019-11-13 		'//设置任务执行时间'
at> pgrep -U root |wc -l > /tmp/ps.root			'//输入命令(统计该时间点系统中由root用户运行的进程数量,并将数值保存到/tmp/ps.root文件中)'
at> <EOT>		'//按Ctrl + D组合键提交任务'
job 1 at Wed Nov 13 00:48:00 2019
[root@localhost ~]# cat /tmp/ps.root		'//查看任务完成情况'
175

4.3 atq 命令,查看待执行任务的列表

  • 对于已经设置,但并未执行的任务,可通过atq命令查看。(已经执行的任务不会出现)
  • atq查看的任务列表,每个任务的序号不会变动,即便1-5个序号任务已经执行完毕,显示出的第六个未执行任务的序号也是6,而不会变成1。
[root@localhost ~]# atq
2 Sun May 7 21:30:00 2017 a root

4.4 atrm 命令,删除指定编号的at任务

  • atrm命令用来删除指定编号的at任务,编号可以通过atq查看。
  • 删除后的at任务不会出现在atq显示结果中。
[root@localhost ~]# atrm 2	//删除第 2 条 at 计划任务
[root@localhost ~]# atq	//确认第 2 条任务已被删除

五、crontab周期性任务设置

  • crontab(定时任务)
  • 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以大大减轻重复性系统管理任务的操作
  • 软件包cronie 提供crontab工具,系统服务crond和配置文件 /etc/crontab。
  • 开启系统服务crond 是启动周期性任务的前提条件

5.1 crontab的配置文件和目录

crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来配置

5.1.1 /etc/crontab 全局配置文件

  • 全局配置文件

  • /etc/crontab 文件中设置的是维护Linux系统所需的任务

  • Linux系统及相关程序在安装时自动设置

  • 不建议用户手动修改此文件

[root@localhost ~]# cat /etc/crontab		'//查看系统任务配置文件'
SHELL=/bin/bash				'//设置执行计划任务的Shell环境'
PATH=/sbin:/bin:/usr/sbin:/usr/bin			'//定义可执行命令及程序的路径'
MAILTO=root				'//将任务输出信息发送到指定用户的邮箱'
HOME=/ 			'//执行计划任务时使用的主目录'

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)		'//分钟范围:0-59'
# |  .------------- hour (0 - 23)		'//小时范围:0-23'
# |  |  .---------- day of month (1 - 31)		'//一个月的天数范围:1-31'
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...		'//月数范围:1-12'
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat		'//一周的天数范围: 0-6(周日用0或者7表示)'
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

5.1.2 /etc/cron.*/ 系统默认设置

  • 系统默认设置cron任务的配置文件存放目录

  • 软件包crontabs安装后,会在/etc/cron.*/目录下生成存放一些系统默认设置的计划任务目录,设置了系统每个小时,每一天做些什么任务

例如:
/etc/cron.hourly/ 目录下存放的是系统每小时要做的任务可执行脚本
/etc/cron.daily/ 目录下存放的是系统每天要做的任务可执行脚本
/etc/cron.weekly/ 目录下存放的是系统每周要做的任务可执行脚本
/etc/cron.monthly/ 目录下存放的是系统每月要做的任务可执行脚本
这些是可执行脚本,不是cron配置文件,crond服务通过run-parts 工具调用执行这些脚本

5.1.3 /var/spool/cron/用户名 用户定义的位置

  • 用户自行设置的cron计划任务将被保存到目录/var/spool/cron/中

  • 用户使用crontab命令创建计划任务,就会在/var/spool/cron/目录下生产一个与用户名相同的文件

例如:root用户的cron计划任务保存在配置文件/var/spool/cron/root中

[root@localhost ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 33 May 7 11:01 /var/spool/cron/root
  • crond守护进程会自动检查上述三个文件,若有配置更改,就会载入内存,不需重启crond守护进程就可以使设置生效

5.2 使用crontab命令管理用户的计划任务

常用选项
crontab -e [-u 用户名]  		'//编辑计划任务  e:edit,编辑,使用方式同Vim编辑器。'
crontab -l [-u 用户名] 		'//查看计划任务  l:list,列表'
crontab -r [-u 用户名]  		'//删除计划任务  r:remove,移除'

crontab -l 		'//查看当前用户的计划列表'
crontab -l -u lisi 		 '//查看lisi用户的计划任务'

crontab -e 		'//可以操作删除一条计划任务'
crontab -r 		'//删除用户所有的计划任务'
  • 命令格式: 时间周期设置 + 任务内容设置
    在这里插入图片描述
  • 分时日月周的取值范围和命令的说明
字段 说明
分钟 取值为0到59之间的任意整数
小时 取值为0到23之间的任意整数
日期 取值为1到31之间的任意整数
月份 取值为1到12之间的任意整数
星期 取值为0到7之间的任意整数,0或7代表星期日
命令 要执行的命令或程序脚本

时间数值的特殊表示方法

  • 表示该范围内的任意时间
    , 表示间隔的多个不连续的时间点
  • 表示一个连续的时间范围
    / 指定间隔的时间频率

例如:
0 17 * * 1-5 ‘//表示周一到周五每天17:00’
30 8 * * 1,3,5 ‘// 表示每周一,三,五的8点30分’
0 8-18/2 * * * ‘// 表示8点到18点之间每2小时’
0 * */3 * * ‘//表示每3天’

  • “分钟”字段应该填写一个具体的时间数值,不可是“*”,否则将会每一分钟都执行一次任务
如:每天15:30将/home/中zhangsan目录复制到/opt/中
[root@localhost ~]# crontab -e		'//编辑计划任务'
进入编辑列表开始编辑,操作类似vim 编辑器
30 15 * * * /usr/bin/cp -r /home/zhangsan /opt/		'//在其中编辑好任务,wq保存退出'

猜你喜欢

转载自blog.csdn.net/ycycyyc_/article/details/107082477