写在开篇之前:
欢迎关注这个啥都要懂一点的男人的 微信公众号:多面手程序员
如果觉得这篇文章还不错,还请不吝点赞~ 也欢迎关注专栏~
题图自百度
一、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 文件即可。
(完)
欢迎评论建议~
可以是对本文内容的看法,可以是文章的改进建议等等~
往期阅读推荐
Linux 命令之who、who am i、whoami 的区别
一篇读懂 Linux 用户管理与操作
详解 Linux 帮助命令