Linux之crontab(例行性任务)

一、crontab 简介

Linux 存在一部分任务,需要定期循环地执行,即例行性任务。

这类例行性的任务分为两类:用户设置的例行性任务和系统层面的例行性任务。

用户设置的例行性任务就是由具体某个用户直接设定的要做的工作,例如每天定时发送邮件等。

系统层面的例行性任务就是系统周期性执行的任务,例如定时清理缓存、备份数据等等。


这种例行性的循环工作调度则需要一个程序来支持。

所有的例行性工作调度都是由 cron 服务控制的,cron 每分钟会检查是否有任务需要执行,若有则执行任务。

Linux 的 crontab 是用来定期循环执行指定任务的命令。


在这里,我们利用 man 命令,查询和解释一下 cron 和 crontab 的区别。

cron 是执行计划命令的守护程序(daemon to execute scheduled commands);

crontab 是维护某个用户的 crontab 文件的命令(maintain crontab files for individual users);

cron 会在搜索 /var/spool/cron/crontabs/ 目录下的文件及 /etc/crontab 文件中所有的 crontab 命令,并载入内存中。

二、用户设置的例行性任务

2.1、crontab 语法

  • crontab命令
crontab -e					# 为当前用户添加例行性任务
crontab -l					# 显示所有例行性任务
crontab -r					#	删除所有例行性任务
crontab -u <user>		# 修改特定用户的例行性任务

温馨提示,如果是删除其中一个计划任务,使用 -e 进行修改,切不可使用 -r 。

在执行了 crontab -e 后,会默认进入当前用户的例行性任务编辑界面。

而后,利用 crontab 语法进行任务编辑。

  • crontab 基本语法
# Example of job definition:
# .---------------- 分钟 (0 - 59)
# |  .------------- 小时 (0 - 23)
# |  |  .---------- 日期 (1 - 31)
# |  |  |  .------- 月份 (1 - 12)
# |  |  |  |  .---- 星期 (0 - 7) (周日 = 0 or 7)
# |  |  |  |  |
# *  *  *  *  * 要执行的命令

2.2、相关文件

  • /etc/cron.allow 与 /etc/cron.deny

cron.allow 和 cron.deny 是限制 crontab 命令使用的用户名单。allow 是允许使用 crontab 命令的用户,deny 是不允许使用 crontab 命令的用户。

两份文件不一定都存在,在 Linux 中,会做如下规定:

(1)如果 cron.allow 文件存在但 cron.deny 文件不存在,那么在文件中写下的用户名,允许执行 crontab 命令。

(2)如果 cron.deny 文件存在但 cron.allow 文件不存在,那么在文件中写下的用户名,不允许执行 crontab 命令。

(3)如果两份文件都存在,那么只有 allow 文件具备优先权,只能使用 allow 文件来做限定用户。

(4)如果两份文件都不存在,那么会根据相关配置文件(depending on site-dependent configuration parameters),要么只有 root 用户允许执行该命令,要么所有的用户都能执行该命令。

  • /var/spool/cron/crontabs/

在新增例行性任务之后,这些任务会在该目录下记录这些例行性任务。

这些任务以用户账号区分。

需要注意的是,不要直接修改这个目录下的文件,可能会由于输入语法错误导致 crontab 无法执行。

三、系统的例行性任务

  • /etc/crontab

crontab -e 是针对用户的例行性任务设计的。

如果是系统的例行性任务,不能使用 crontab 命令来新增例行性任务。而是直接编辑 /etc/crontab 文件即可。

(完)

本文为原创文章,转载请告知作者,未经授权请勿转载。

欢迎关注我的微信公众号、知乎:多面手程序员

如果您觉得这篇文章还不错,随手点赞,手有余香~ : )

发布了6 篇原创文章 · 获赞 5 · 访问量 612

猜你喜欢

转载自blog.csdn.net/MultiSkill/article/details/104316265