【linux】crontab定时任务介绍

1.简介

Linux crontab 是用来定期执行程序的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

而 linux 任务调度的工作主要分为以下两类:

1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

2.crontab语法

crontab [-u username] [-l|-e|-r]

选项与参数:

-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;

-e :编辑 crontab 的工作内容

-l :查阅 crontab 的工作内容

-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

3.crontab限制

/etc/cron.allow:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;

/etc/cron.deny:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。

以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在配置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!

4.crontab配置文件

crontab会去3处读取配置文件:

/etc/crontab (文件) 只有root用户能编辑,一般不会改动,默认每天,每周,每月,去执行/etc/cron.daily,/etc/cron.hourly, /etc/cron.monthly 下的所有可执行文件。

/etc/cron.d (目录) 只有root用户能编辑,当一个项目有自己的定时脚本时,将编辑好的cron文件放入这个目录下即可生效。

/var/spool/cron (目录) 使用crontab -e 编辑就是这个目录下的cron文件,文件名是用户名,所有用户都能在这个目录下编辑自己的cron文件。

/etc/cron.d下的cron文件和/var/spool/cron下的cron文件在格式上有略微的区别,/etc/cron.d下的cron文件在命令前需要指定执行命令的用户,而/var/spool/cron下的cron文件则不需要。

|------------------------------------------------------------------------------------------------------------------------------------------|
| /etc/cron``.d: 30 03 *``/1 * * root ``/bin/sh /home/start``.sh /var/spool/cron``: 30 03 *``/1 * * ``/bin/sh /home/start``.sh |

5.crontab格式介绍

每项工作 (每行) 的格式都是具有六个栏位,这六个栏位的意义为:

|------|------|------|------|------|-----|------|
| 代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
| 数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 运行任务 |

比较有趣的是那个『周』喔!周的数字为 0 或 7 时,都代表『星期天』的意思!另外, 还有一些辅助的字符,大概有底下这些:

|--------|---------------------------------------------------------------------------------------------------------------|
| 特殊字符 | 代表意义 |
| *(星号) | 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思! |
| ,(逗号) | 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是 0 3,6 * * * command时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用! |
| -(减号) | 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作 20 8-12 * * * command仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思! |
| /n(斜线) | 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则: */5 * * * * command |

另一个需要注意的地方在於:『你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。

相关推荐
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
cominglately7 小时前
centos单机部署seata
linux·运维·centos
魏 无羡7 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse7 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
木子Linux8 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算