目录
1、进程管理
1.1、进程介绍
1.2、查看系统进程信息
1.2.1、ps
1.2.2、top
**1.2.3、pgrep**
1.2.4、pidof
1.2.6、pstree
1.3、杀死进程
1.3.1、kill
1.3.2、killall
1..3.3、pkill
1.4、进程的启动方式
1.4.1、手工启动进程
1.4.2、调度启动进程
1.5、进程挂起和恢复
1.6、不间断运行进程
2、计划任务管理
2.1、一次性计划任务
2.1.1、创建一次性计划任务
2.1.2、控制at使用
2.2、周期性计划任务
2.2.1、/etc/crontab文件实现任务计划
2.2.2、使用crontab命令实现任务计划
2.2.3、恢复丢失的crontab文件
2.2.4、控制使用crontab
1、进程管理
1.1、进程介绍
Linux是一个多用户、多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux系统可以同时执行几个任务,它可以在还未执行完一个任务时又执行另外一个任务,操作系统管理多个用户的请求和多个任务。
Linux系统上所有运行的内容都可以称为进程。每个用户任务、每个系统管理守护进程都可以称为进程。进程与程序之间还是有明显区别的。程序只是一个静态的命令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。一个程序可以启动多个进程。进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。
进程具有以下特征。
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生、动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行。
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
异步性:由于进程间的相互制约,使得进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
结构特征:进程由程序、数据和进程控制块三部分组成。
在Linux系统中有以下三种进程。
交互式进程:一个由Shell启动并控制的进程,交互式进程既可在前台运行,也可在后台运行。
批处理进程:与终端无关,安排在指定时刻完成的一系列进程。
守护进程:在引导系统时启动,以执行即时的操作系统任务,如crond、rsyslogd、named等。
1.2、查看系统进程信息
查看Linux系统中的进程信息,可以使用ps、top、pgrep、pidof和pstree等命令
1.2.1、ps
介绍
ps命令是Linux和Unix系统中用于展示当前系统中活动进程的一个命令工具。通过使用ps命令,你可以查看关于当前运行的进程的信息,比如进程ID(PID)、正在运行的命令、CPU使用率、内存使用率等。
基本用法
ps:显示当前终端会话中的活动进程。
ps ax:显示所有进程的列表。
ps aux:显示所有进程的详细列表,包括用户、CPU和内存使用率等信息。
ps -ef:使用全格式显示所有进程,这与aux选项类似,但格式略有不同。
常用选项
-e 或 –all:显示所有进程。
-f:显示完整格式。
-u 用户名:显示指定用户的进程。
–sort:根据指定的关键字排序,例如–sort=-%mem按内存使用率降序排列。
-p PID:根据进程ID查看进程信息。
示例
1、查看所有进程及其详细信息:
ps aux
2、查看特定用户(例如用户名为john)的所有进程:
ps -u john
3、根据PID(假设为1234)查看进程信息:
ps -p 1234
4、查看系统中消耗内存最多的10个进程:
ps aux --sort=-%mem | head -10
输出字段解释
常见的字段及其描述:
PID:进程ID,唯一标识一个进程。
TTY:终端类型,进程与之关联的终端。
TIME:CPU时间,该进程占用的处理器时间。
CMD:命令名称/执行的命令行,启动进程时使用的命令。
USER:进程所有者的用户名。
%CPU:进程占用的CPU百分比。
%MEM:进程占用的物理内存百分比。
VSZ:虚拟内存大小,单位为KB。
RSS:Resident Set Size,进程占用的非交换物理内存大小,单位为KB。
STAT:进程状态。常见状态有:
R(运行中)
S(睡眠中)
T(停止状态)
Z(僵尸进程)
D(不可中断睡眠状态)
START:进程启动时间或启动日期。
NI:nice值,表示进程优先级的调整值。
PPID:父进程ID,即启动该进程的进程的ID。
1.2.2、top
介绍
top命令是Linux和Unix系统中用于实时显示系统进程和资源使用情况的工具。它提供了一个动态更新的视图,展示了CPU、内存使用情况以及系统上最消耗资源的进程。top命令非常适合于监控系统的实时性能和资源使用情况。
基本用法
启动top命令非常简单,只需在终端中输入top,然后按回车键。默认情况下,top会按照CPU使用率排序进程,最顶部的进程是当前使用CPU最多的进程。
主要显示区域
top命令的输出大致可以分为两部分:
系统概览:显示在屏幕的上方,提供了CPU、内存(物理内存和交换空间)和系统运行时间等信息。
进程列表:显示在屏幕的下半部分,列出了当前系统上的活动进程,通常按照某种资源使用情况(如CPU或内存)进行排序。
主要字段解释
PID:进程ID。
USER:运行该进程的用户。
PR:进程优先级。
NI:nice值,影响进程调度优先级的值。
VIRT:虚拟内存使用量。
RES:常驻内存使用量。
SHR:共享内存大小。
S:进程状态(例如,S代表睡眠,R代表运行中)。
%CPU:进程占用的CPU百分比。
%MEM:进程占用的物理内存百分比。
TIME+:进程占用CPU的总时间。
COMMAND:启动进程的命令名称或命令行。
交互命令
在top运行时,你可以使用一些交互命令来改变显示或对进程进行操作:
h 或 ?:显示帮助。
k:终止一个进程。系统将提示你输入想要终止的进程ID(PID)和信号。
P:按CPU使用率排序。
M:按内存使用率排序。
T:按时间/累计时间排序。
f:选择要显示的字段。
q:退出top。
top命令输出信息描述
top命令输出信息统计信息区前五行是系统整体的统计信息,主要显示任务队列、进程、CPU、内存和swap等信息。
任务队列信息
系统时间:当前的系统时间。
运行时间:系统自上次启动以来已经运行了多长时间。
用户数:当前登录到系统的用户数量。
系统负载:显示过去1分钟、5分钟和15分钟的平均系统负载。系统负载表示的是系统工作的繁忙程度,即平均活跃进程数。数字越高,表示系统越繁忙。
进程信息
总进程数:系统中总的进程数。
运行中的进程数:当前正在运行的进程数。
休眠中的进程数:当前处于睡眠状态的进程数。
停止的进程数:被停止或暂停执行的进程数。
僵尸进程数:已结束但其父进程尚未对其进行处理(如读取其退出状态)的进程。
CPU信息
用户空间占用百分比:执行用户级进程的时间百分比。
系统空间占用百分比:在内核级别执行的时间百分比,不包括优先级调整和等待I/O的时间。
优先级调整时间百分比:改变进程优先级所花费的时间百分比。
空闲时间百分比:CPU处于空闲状态的时间百分比,没有执行任何任务。
内存信息
物理内存总量:系统的总物理内存量。
已使用的物理内存量:已被使用的物理内存量,包括所有缓存和缓冲区。
空闲物理内存量:当前未被使用的物理内存量。
缓冲区使用量:由内核缓冲区使用的内存量。
swap信息
交换区总量:系统交换区(虚拟内存)的总量。
已使用的交换区量:已被使用的交换区量。
空闲交换区量:当前未被使用的交换区量。
缓存使用量:用作缓存或临时存储交换数据的内存量。
1.2.3、pgrep
介绍
pgrep 是一个在 Unix 和Linux 系统中使用的命令行工具,用于根据进程的名称或其他属性查找进程。pgrep 的名称来源于 “process grep”,意味着它可以根据用户提供的模式来搜索当前运行的进程列表,并输出匹配进程的进程标识符(PID)。这个命令特别有用于自动化脚本和系统管理中,允许管理员快速找到特定的运行进程。
基本用法
查找进程名: pgrep process_name,这将列出所有名为 process_name 的进程的 PID。
使用选项: pgrep 支持多种选项来精确化搜索条件。例如:
-u 用户名或用户ID,用于查找属于特定用户的进程。
-l 不仅返回 PID,还返回进程名。
-f 允许使用完整的命令行进行搜索,而不仅仅是进程名。
示例
查找所有 SSH 进程: pgrep ssh
查找属于特定用户的进程: pgrep -u username
查找并显示进程名: pgrep -l nginx
使用完整命令行搜索进程: pgrep -f “/usr/bin/python my_script.py”
pgrep 是一个强大的工具,可以与其他命令结合使用,如 kill(通过 xargs)来管理找到的进程。例如,如果你想结束所有名为 myapp 的进程,可以使用 pgrep myapp | xargs kill 命令。
1.2.4、pidof
介绍
pidof 是一个在 Unix 和Linux 操作系统中使用的命令行工具,用于找出给定程序名的进程标识号(PID)。它通常用于脚本和系统管理中,以便快速确定某个特定程序的运行状态。pidof 与 pgrep 类似,但通常更专注于获取进程ID,而不提供像 pgrep 那样的广泛搜索选项。
基本用法
pidof [选项] 程序名
选项
-s:仅返回一个 PID,即使找到多个匹配的进程也是如此。这对于只期望或需要处理单个进程实例的情况很有用。
-o:排除具有指定 PID 的进程。这在需要排除当前脚本或命令自己的 PID 时特别有用。
示例
找出 httpd 进程的 PID:pidof httpd
找出多个程序的 PID:pidof nginx httpd
使用场景
pidof 常用于脚本中,以检查特定服务或程序是否正在运行。例如,在启动一个服务之前,可能会先检查该服务是否已经启动。如果已经启动,根据脚本逻辑,可能会跳过启动步骤或先停止当前运行的实例。
pidof 的输出可以直接用于其他命令,如 kill,以便快速结束找到的进程。例如:kill $(pidof httpd)
这个命令会终止所有 httpd 进程。
1.2.6、pstree
介绍
pstree 是一个在 Unix 和Linux 系统中使用的命令行工具,它以树状图的形式显示系统中所有进程的层次结构。这个工具非常有用,因为它可以直观地展示进程之间的父子关系,帮助用户理解系统上运行的进程及其相互之间的关系。
安装
yum -y install psmisc
基本用法
pstree [选项] [PID或用户]
如果不带任何参数运行 pstree,它将显示所有进程的树状图,以 init 或 systemd(取决于系统使用的初始化系统)作为根进程。
选项
-p:显示进程的 PID。
-u:显示进程的所有者。
-n:按 PID 排序,而不是按名称排序。
-a:显示命令行参数。
例如,使用 -p 选项的命令 pstree -p 将在显示的树状图中包含每个进程的 PID。
示例
查看整个系统的进程树:
pstree
这将以树状图形式显示系统中所有进程的层次结构。
查看特定用户的进程树:
pstree 用户名
这将只显示指定用户启动的进程的树状图。
显示进程 PID 和所有者:
pstree -pu
这个命令将在树状图中包括每个进程的 PID 和所有者信息。
使用场景
pstree 常被用于调试和系统监控,特别是当需要理解特定服务或应用程序的进程结构时。通过查看进程树,可以快速识别哪些进程是由其他进程启动的,这对于诊断问题、优化系统性能或了解系统行为非常有帮助。
1.3、杀死进程
要关闭某个应用程序可以通过杀死其进程的方式实现,如果进程一时无法杀死,可以将其强制杀死。
1.3.1、kill
介绍
kill 是 Unix 和类 Unix 操作系统中用于发送信号给进程的命令行工具。最常见的用途是结束进程。通过 kill 命令,用户可以向进程发送各种类型的信号,其中 SIGTERM(终止信号,默认信号)和 SIGKILL(强制终止信号)是最常用于结束进程的信号。
基本用法
kill [选项] <进程ID>
示例
发送默认信号(SIGTERM)结束进程:
kill 12345
这个命令向 PID 为 12345 的进程发送 SIGTERM 信号,请求该进程终止。
强制结束进程:
kill -9 12345
或者
kill -SIGKILL 12345
这两个命令都向 PID 为 12345 的进程发送 SIGKILL 信号,强制结束该进程。使用 SIGKILL 信号时,进程将被立即终止,不会进行任何清理操作。
选项
-l:列出所有信号的名称。
-s:指定要发送的信号。可以使用信号的数字或名称,例如 -s SIGKILL 或 -s 9。
-9:这是 -s SIGKILL 的快捷方式,用于强制终止进程。
注意事项
使用 kill 命令时需要谨慎,特别是使用 -9(SIGKILL)信号,因为这会立即终止进程,可能导致数据丢失或未完成的事务。
并非所有进程都可以被 kill 命令终止。拥有足够权限的用户(如 root)通常可以终止任何进程,但受保护的系统进程或内核进程可能无法被终止。
在使用 kill 终止进程之前,最好尝试使用默认的 SIGTERM 信号,给予进程适当的时间来清理资源和正常退出。如果进程没有响应,再考虑使用 SIGKILL 强制结束。
1.3.2、killall
介绍
在Linux系统中,killall命令是一个用于终止运行中的进程的工具。它通过进程的名称来匹配和终止进程,而不是通过进程ID。这使得killall在需要终止多个同名进程时非常有用。
基本用法
killall [选项] 进程名称
安装
yum -y install psmisc
选项
-i:交互模式,在结束每个进程之前询问用户。
-g:当指定进程为组长时,结束整个进程组的所有进程。
-e:确切匹配进程名称。
-I 或 –ignore-case:忽略进程名称的大小写。
-w 或 –wait:等待所有指定的进程终止。
-s 或 –signal [信号]:发送特定信号到所有指定的进程。如果没有指定信号,默认使用TERM信号。
示例
终止指定的进程
如果你想终止所有名为myapp的进程,可以使用以下命令:
killall myapp
使用特定信号终止进程
如果你想用SIGKILL信号(通常用于强制终止)来结束所有myapp进程,可以这样做:
killall -s KILL myapp
或者使用信号的数字表示:
killall -s 9 myapp
交互式终止进程
如果你想在终止每个myapp进程之前都进行确认,可以使用:
killall -i myapp
请注意,虽然killall在大多数情况下都是安全的,但使用强制信号(如SIGKILL)可能会导致进程无法清理其正在使用的资源。因此,在使用强制信号之前,最好尝试使用默认的TERM信号或其他方法来正常结束进程。
1…3.3、pkill
介绍
pkill命令在Linux和Unix系统中用于发送信号到进程,其工作方式与kill命令类似,但它允许通过进程名或其他属性而不是进程ID(PID)来指定进程。这使得pkill在需要对一组相似的进程进行操作时特别有用。
基本语法
pkill [选项] <模式>
选项和参数
<模式>:指定要匹配的进程名称或其他属性的模式。pkill将会发送信号给所有匹配该模式的进程。
-signal 或 -<信号编号>:指定要发送的信号。如果不指定,默认发送的是TERM信号,用于请求进程正常退出。
-f:匹配进程的命令行参数而不仅仅是进程名。这允许更精确地指定要终止的进程。
-u<用户>:只匹配指定用户的进程。
-n:只对最新启动的进程发送信号。
-o:只对最旧的进程发送信号。
-v:反转匹配,即对不匹配模式的进程发送信号。
pkill [选项] <模式>
终止所有名为myapp的进程
pkill myapp
发送SIGKILL信号来强制终止myapp进程
pkill -9 myapp
终止所有属于用户john的myapp进程
pkill -u john myapp
使用完整命令行匹配来终止进程
如果你想终止所有使用特定配置文件启动的myapp实例,可以这样做:
pkill -f ‘myapp –config /path/to/config’
注意事项
使用pkill时要特别小心,确保匹配模式不会意外匹配到关键系统进程。
在使用强制信号(如SIGKILL)之前,尝试使用更温和的信号(如SIGTERM),以给予进程正常清理和退出的机会。
pgrep命令可以与pkill结合使用,先通过pgrep检查哪些进程会被匹配,然后再使用pkill对这些进程进行操作。
1.4、进程的启动方式
输入运行程序的程序名执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两种主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。
1.4.1、手工启动进程
前台启动
这是手工启动进程最常用的方式。当用户输入一个命令时就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。如果启动一个比较耗时的进程,然后再把该进程挂起,使用ps命令查看,就会看到该进程在ps显示列表中。
示例
[root@192 ~]# top
------省略-------
[1]+ 已停止 top //输入命令回车后,按[Ctrl+z]挂起该命令
[root@192 ~]# ps -ef |grep top
root 9252 9223 0 21:09 pts/0 00:00:00 top
root 9254 9223 0 21:09 pts/0 00:00:00 grep --color=auto top
//查看进程信息,可以看到刚才执行的命令进程号是9252
后台启动
直接从后台手工启动一个进程用得比较少一些,除非是该进程非常耗时,而且用户也不急着需要结果的时候。假设用户需要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个Shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。
从后台启动进程其实就是在命令结尾加上一个“&”号。输入命令以后,出现一个数字,这个数字就是该进程的进程号(PID),然后就出现了提示符,用户可以继续其他工作。
示例
[root@192 ~]# top &
[1] 9292
两种启动方式的共同点
新进程都是由当前Shell这个进程产生的。也就是说,是Shell创建了新进程,于是就称这种关系为进程间的父子关系。这里Shell是父进程,而新进程是子进程。一个父进程可以有多个子进程,一般地,子进程结束后才能继续父进程;当然如果是从后台启动,那就不用等待子进程结束了。
1.4.2、调度启动进程
在 Linux系统中,任务可以被配置在指定的时间、日期或系统平均负载量低于指定的值时自动运行。Linux预配置了重要系统任务的运行,以便使系统能够时时被更新。系统管理员可使用自动化的任务来执行定期备份、监控系统和运行定制脚本等。在Linux系统中最常使用的就是cron、at、batch和anacron等方式调度进程启动。
1.5、进程挂起和恢复
允许将进程挂起并可以在需要的时候恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按[Ctrl+Z]键,即可挂起当前的前台作业。使用jobs命令可以显示Shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。
恢复进程执行时,可以使用fg命令将挂起的作业放回到前台执行,也可以使用bg命令将挂起的作业放到后台执行。
示例
1、恢复前台执行
[root@192 ~]# top
------忽略-------
[1]+ 已停止 top
[root@192 ~]# jobs
[1]+ 已停止 top
[root@192 ~]# fg
//恢复前台
2、后台执行
[root@192 ~]# yum makecache > output.txt
^Z
[1]+ 已停止 yum makecache > output.txt
[root@192 ~]# jobs
[1]+ 已停止 yum makecache > output.txt
[root@192 ~]# bg
[1]+ yum makecache > output.txt &
[root@192 ~]# jobs
[1]+ 运行中 yum makecache > output.txt &
1.6、不间断运行进程
nohup命令是Unix和Linux系统中用来运行命令的一个工具,即使用户登出或终端关闭,使用nohup运行的进程也会继续在后台运行。这对于在远程服务器上启动长时间运行的进程特别有用,因为你可以启动进程后安全地关闭终端或断开连接,而不会影响进程的执行。
基本用法
nohup 命令 [参数] &
关键点
不间断运行: nohup确保命令在用户登出或终端关闭后继续运行。
输出重定向:如果没有手动重定向输出,nohup命令的标准输出和标准错误默认会被重定向到当前目录下的nohup.out文件中。如果当前目录不可写,输出将被重定向到用户的主目录下的该文件中。
后台执行:通常与&结合使用,将命令放入后台执行。
示例
基本使用:在后台运行my_script.sh脚本。
nohup ./my_script.sh &
输出重定向:将标准输出和错误输出重定向到指定文件。
nohup ./my_script.sh > output.log 2>&1 &
这里,> output.log将标准输出重定向到output.log文件,2>&1将标准错误也重定向到同一个文件。
注意事项
使用nohup运行的命令开始执行后,即使关闭终端或断开SSH连接,该命令也会继续在后台运行。
可以使用jobs, fg, bg, ps, kill等命令来管理和控制后台进程。
nohup是一个非常适合用于远程服务器操作的工具,尤其是需要长时间运行的任务。
2、计划任务管理
如果需要在指定时间或特定条件下触发某个作业,就需要创建任务计划,执行该作业,在Linux系统中常用cron、at、batch和anacron实现该功能。
2.1、一次性计划任务
如果想在Linux系统中在指定时间内调度一次性的任务,可以使用at命令。这个命令允许指定一个将来的时间点来执行一次性的命令或脚本。
2.1.1、创建一次性计划任务
使用at命令的基本步骤:
安装at(如果尚未安装):在一些Linux发行版中,at命令可能默认没有安装。您可以通过包管理器安装它。
[root@localhost ~]# rpm -q at
未安装软件包 at
[root@localhost ~]# yum -y install at
启动at服务:确保atd服务正在运行。您可以通过以下命令启动它:
[root@localhost ~]# systemctl start atd
并使用以下命令确保它在启动时自动运行:
[root@localhost ~]# systemctl enable atd
使用at命令安排任务:要安排一个任务,只需输入at加上指定的时间。时间格式可以是具体的时间(如4pm或2023-12-25 20:00)或相对格式(如now + 1 hour)。完成后,按Enter键,然后输入您想在指定时间执行的命令。输入完命令后,按Ctrl + D来提交任务。
例如,如果您想在今天下午4点创建一个文件,您可以这样做:
[root@localhost ~]# at 11pm
at> echo 111 > test
at> <EOT> //[Ctrl+D]
job 1 at Tue May 7 23:00:00 2024
查看已安排的任务:要查看所有已安排的at任务,可以使用以下命令:
[root@localhost ~]# atq
1 Tue May 7 23:00:00 2024 a root
删除任务:如果您需要取消任何已安排的任务,首先使用atq命令找到任务的编号,然后使用atrm加上任务编号来删除它。例如,如果任务编号是1,您可以这样删除它:
[root@localhost ~]# atrm 1
[root@localhost ~]# atq
通过这些步骤,您可以轻松地在Linux系统中安排一次性任务,让它们在未来某个特定时间自动执行。
2.1.2、控制at使用
root用户可以通过/etc/at.allow和/etc/at.deny文件来控制哪些用户可以使用at命令。/etc/at.allow和/etc/at.deny文件被用来限制对at的使用,这两个控制文件的格式都是每行一个用户,两个文件都不允许空格。如果这两个控制文件被修改了,atd守护进程不需要重新启动。控制文件在每次用户添加或删除一项at任务时都会被读取。无论控制文件中的规定如何,root用户都可以使用at。
如果/etc/at.allow文件存在,只有其中列出的用户才被允许使用at,并且/etc/at.deny文件会被忽略。如果/etc/at.allow文件不存在,所有在/etc/at.deny文件中列出的用户都被禁止使用at。
注意:
默认只有/etc/at.deny文件,没有/etc/at.allow文件,使用/etc/at.allow文件时需要手工创建。
**示例:**限制用户tom使用at。
1、使用vi编辑器修改/etc/at.deny文件,将需要禁止使用at功能的用户名添加进去,下面的示例禁止用户tom使用at。
[root@localhost ~]# echo tom >> /etc/at.deny
2、以用户zhangsan登录系统无法使用at。
[root@localhost ~]# su – tom
3、tom用户创建一次性任务
[tom@192 ~]$ at 11pm
You do not have permission to use at.
2.2、周期性计划任务
在Linux中,cron是一个用于定期执行任务的守护进程。可以使用它来安排周期性的任务,比如每天、每周或每月运行脚本。
使用cron实现任务任务计划可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的。
2.2.1、/etc/crontab文件实现任务计划
root用户通过修改/etc/crontab文件可以实现任务计划,而普通用户却无法修改该文件。crond守护进程可以在无需人工干预的情况下,根据时间和日期的组合来调度执行重复任务。
[root@localhost ~]# rpm -q crontabs cronie
在/etc/crontab文件中每个命令都给出了绝对路径。当使用cron运行Shell脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。既然是用户向cron提交了这些作业,就要向cron提供所需的全部环境。cron其实并不知道所需要的特殊环境。所以要保证在Shell脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。
以下是/etc/crontab配置文件的内容示例。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
30 21 * * * root /root/backup.sh
//在每天晚上的21:30执行/root/backup.sh文件
45 4 1,10,22 * * root /root/backup.sh
//在每月1、10、22日的4:45执行/root/backup.sh文件
20 1 * * 6,0 root /bin/find /-name core -exec rm {
};
//在每星期六、星期日的1:20执行一个find命令,查找相应的文件
0,30 18-23 * * * root /root/backup.sh
//在每天18:00~23:00之间每隔30分钟执行/root/backup .sh
0 23 * * 6 root /root/backup.sh
//在每星期六的23:00执行/root/backup.sh
2.2.2、使用crontab命令实现任务计划
root以外的用户可以使用crontab命令配置cron任务。所有用户定义的crontab都被保存在/var/spool/cron目录中,并使用创建它们的用户身份来执行。
以某位用户身份创建一个crontab 项目,登录为该用户,然后输入crontab -e命令。该文件使用的格式和/etc/crontab相同。当对crontab所做的改变被保存后,该crontab文件会根据该用户名被保存在/var/spool/cron/文件中。
crond守护进程每分钟都检查/etc/crontab文件、/etc/cron.d目录以及/var/spool/cron目录中的改变。如果发现了改变,它们就会被载入内存。
编辑Crontab文件
打开当前用户的crontab文件:在终端中输入crontab -e命令。这会打开一个编辑器,让您可以添加、编辑或删除计划任务。
为特定用户编辑crontab:如果您想编辑其他用户的crontab文件,需要具有相应的权限。使用sudo crontab -e -u username命令,将username替换为实际的用户名。
Crontab语法
Crontab文件中的每一行都表示一个计划任务,其格式如下:
分 时 日 月 周 命令
分:分钟(0-59)
时:小时(0-23)
日:一个月中的某天(1-31)
月:月份(1-12)
周:星期几(0-7,其中0和7都表示星期天)
命令:要执行的命令或脚本路径
示例
每天午夜运行脚本:
0 0 * * * /path/to/daily_script.sh
这条命令会在每天午夜(00:00)执行/path/to/daily_script.sh脚本。
每周一上午8点运行脚本:
0 8 * * 1 /path/to/weekly_script.sh
这会在每周一的上午8点(08:00)执行/path/to/weekly_script.sh脚本。
每15分钟运行一次命令:
*/15 * * * * /path/to/command
这条命令会在每小时的第0、15、30和45分钟执行指定的命令。
管理Crontab
列出crontab内容:使用crontab -l命令可以查看当前用户的crontab内容。
删除crontab内容:使用crontab -r命令可以删除当前用户的所有计划任务。
注意事项
在编写cron任务时,请确保指定的命令或脚本路径正确无误。
对于复杂的任务,建议先写成脚本,然后在crontab中调用该脚本。
考虑到环境变量问题,最好在脚本中明确指出所需程序的完整路径。
记得给脚本文件添加执行权限,使用chmod +x /path/to/script.sh。
2.2.3、恢复丢失的crontab文件
如果不小心误删除了crontab文件,且在主目录下还有一个备份,那么可以将其复制到/var/spool/cron/,其中是用户名。
如果由于权限问题无法完成复制,可以使用以下命令,其中需要指定在用户主目录中复制的副本文件名。
以tom用户登录恢复丢失的crontab文件。
查看tom的crontab内容
tom@192 ~]$ crontab -l
30 21 * * * root /root/backup.sh
备份tom的crontal内容
[tom@192 ~]$ crontab -l > /home/tom/tomcron
删除tom的crontab内容
[tom@192 ~]$ crontab -r
[tom@192 ~]$ crontab -l
no crontab for tom
利用备份恢复丢失的crontab文件
[tom@192 ~]$ crontab /home/tom/tomcron
2.2.4、控制使用crontab
/etc/cron.allow和/etc/cron.deny文件被用来限制用户对crontab的使用。这两个控制文件的格式都是每行一个用户。两个文件都不允许空格。如果控制文件被修改了,crond守护进程不需要重新启动。控制文件在每次用户添加或删除一项crontab任务时都会被读取。无论控制文件中的规定如何,root用户都可以使用crontab。如果/etc/cron.allow文件存在,只有其中列出的用户才被允许使用crontab,并且/etc/cron.deny文件会被忽略。如果/etc/cron.allow文件不存在,所有在/etc/cron.deny文件中列出的用户都被禁止使用crontab。
注意:
默认只有/etc/cron.deny文件,没有/etc/cron.allow文件,使用/etc/cron.allow文件时需要手工创建。
[root@localhost ~]# echo tom > /etc/cron.deny
[root@localhost ~]# cat /etc/cron.deny
tom
[root@localhost ~]# su - tom
上一次登录:二 5月 7 22:51:04 CST 2024pts/0 上
[tom@192 ~]$ crontab -l
You (tom) are not allowed to use this program (crontab)
See crontab(1) for more information
暂无评论内容