Linux命令crontab的使用——循环执行设定的命令
相对于at是仅执行一次命令,本篇我们要说的crontab是循环执行设定的命令。
同样crontab的使用需要有crond服务的支持,该服务的启动方式如下
# service crond start
//或者
# /etc/init.d/crond start
crontab使用者权限配置
在系统中,为了安全起见,当然不能说是所有的用户都来使用crontab命令了。要知道这是很危险的一件事情。因此我们需要对用户的权限进行设置,通at一样,我们需要用两个文件来设定用户的权限。它们分别是 /etc/cron.allow 和 /etc/cron.deny。
/etc/cron.allow 将允许使用crontab的用户写入该文件,在这个文件中的用户有使用crontab的权限。当然不在这个文件中的用户就没有使用crontab的权限。
/etc/cron.deny 将不允许使用crontab的用户写入该文件,在这个文件中的用户没有使用crontab的权限。当然不在这个文件中的用户就有使用crontab的权限。
按照优先顺序来说,/etc/cron.allow 要优先于/etc/cron.deny。crond进程对于权限的工作方式是这样的:当用户使用crontab命令的时候,进程会在系统中查找/etc/cron.allow文件。找到该文件以后检测该用户是否在该文件中,如果在文件中就允许其使用crontab,如果不在就不允许其使用crontab。如果/etc/cron.allow文件不存在,则进程会查找/etc/cron.deny文件,然后检测该用户是否在这个文件中。如果两个文件都不存在,则系统默认只有root用户有使用crontab的权限。一般系统中,因为所有的用户默认都是被信任的,因此默认情况下,系统中存在/etc/cron.deny文件,并且该文件为空。
crontab运行方式
当用户使用crontab创建定时命令的时候,该项工作就会以文档的形式被记录到/var/spool/cron/目录内。并且该文档是用用户名命名的。举例来说,如果用户onmpw使用了crontab创建了定时的命令。那该项工作就会被记录到/var/spool/cron/onmpw文档内。但是我们尽量不要用vim去编辑这个文件,因为很可能由于语法错误导致cron不能运行。
crontab命令语法
接下来我们来看一下crontab的语法
# crontab [ -u 用户名 ] [选项参数]
选项参数:
-u : 该选项只有root才有权限使用,用来帮助其他的用户设定或者移除crontab工作例程。
-e : 编辑crontab的工作内容
-l : 查阅crontab的工作内容
-r : 移除所有的crontab的工作的内容。注意时所有的内容。如果只需要移除其中一条或者两条等需要使用 –e参数进行编辑。
crontab 每一条工作的格式
在说完了crontab的语法之后,我们马上使用如下命令来进行编辑了
# crontab –e
然后会打开一个vim的界面,这时我们需要了解一下该文件的内容格式才能去创建我们的工作例程。
每一项工作需要占一行,那么这一行的内容应该是什么呢?每一行的内容包括这样六项
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 周(0-7) 命令
在这六项中,其他的都很容易理解。只有周这一项需要我们注意一下,就是周的数字如果设为0或者7的时候,代表的都是星期天的意思。
当然除了这些正常的数字之外,crontab还为我们提供了几个特殊的字符来帮助我们进行更灵活的设置。
*(星号):代表任何时刻都接受。
59 23 * * * rm –rf /tmp/*
我们看在上面的示例中,日、月、周都是*,则代表的是‘不论何月,何日还是星期几的晚上23:59执行后面的命令’。
,(逗号):分割时段。比方说,我们需要在每天凌晨2点 和 晚上23点 删除/tmp/ 目录下的sess_开头的文件,那就应该这样设置
0 2,23 * * * rm –rf /tmp/sess_*
-(减号):代表的是一个时间段。如果说我们需要在每天的上午8点到下午16点执行一项工作,那我们应该这样设置
0 8-16 * * * 命令
/n : n是数字,意思是说每隔n个单位就执行一次该命令。
*/3 * * * * 命令
这里使用 *与/5配合,当然我们也可以使用 0-59/3这样的等价形式。
这里有一点需要注意:周和日月不可同时存在。也就是说如果设定了周为具体的数字,那我们的日和月需要用 * 来表示。同理,如果设置了日和月为具体的数字,则周则用* 来表示。
crontab工作例程管理
好了,我们知道了如何使用crontab –e 来设定工作例程了。接下来我们看一下如何管理我们设定的工作例程。
在crontab命令语法中我们讲到有两个选线 –l 和 –r。查找我们设定的工作例程使用-l。
# crontab –l
*/5 * * * * rm -rf /tmp/sess_*
10 11 * * * rm -rf /tmp/wsdl_*
这是查看所有的工作例程,如果我们想删除所有的工作例程可以使用 –r
# crontab –r //删除所有的工作例程
# crontab –l //再次查看
//已经为空了
当然,先前我们说过,如果你想只是删除某一项的话,需要用-e 再次编辑,将你要删除的那项工作的信息删除就可以了。这点千万要注意。
crontab是常用的命令,对于内容的格式我们一定要熟悉。
希望本文对大家有所帮助。
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数