Linux任务计划crontab

实验介绍

我们时常会有一些定期定时的任务,如周期性的清理一下/tmp,周期性的去备份一次数据库,周期性的分析日志等等。而且有时候因为某些因素的限制,执行该任务的时间会很尴尬。本课程将带你很好的利用 Linux 系统的计划工具

实验涉及的知识点

  • crontab 的认识与使用

一、crontab 的使用

crontab 简介

crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

crontab 准备

crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了(在本实验环境中需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动)

sudo service rsyslog start

service-rsyslog-start

在本实验环境中 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它(同样在本实验环境中需要手动启动,自己的本地 Ubuntu 的环境中也不需要手动启动)

sudo cron -f &

实验楼

crontab 使用

下面将开始 crontab 的使用了,我们通过下面一个命令来添加一个计划任务

crontab -e

第一次启动会出现这样一个画面,这是让我们选择编辑的工具,选择第一个基本的 vim 就可以了

实验楼

而选择后我们会进入这样一个画面,这就是添加计划的地方了,与一般的配置文档相同,以#号开头的都是注释,通过文档的最后一排我们可以猜猜 crontab 的格式是什么样的呢?

实验楼

我们通过这样一张图来了解 crontab 的文档编辑的格式与参数

实验楼

在了解命令格式之后,我们通过这样的一个例子来完成一个任务的添加,在文档的最后一排加上这样一排命令,该任务是每分钟我们会在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件

*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)

注意 “ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用,前面加 ” \ ” 符号转意,否则,“ % ” 符号将执行其结束命令行或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令。

添加成功后我们会得到最后一排 installing new crontab 的一个提示

实验楼

当然我们也可以通过这样的一个指令来查看我们添加了哪些任务

crontab -l

通过图中的显示,我们也可以看出,我们正确的保存并且添加成功了该任务的

实验楼

虽然我们添加了任务,但是如果 cron 的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会帮我们执行,我们可以通过一下2种方式来确定我们的 cron 是否成功的在后台启动,默默的帮我们做事,若是没有就得执行上文准备中的第二步了

ps aux | grep cron

or

pgrep cron

实验楼

通过这个截图我们可以看到任务在创建之后便创建了一个当时时间的文件(也就是10点18分04秒的时候),后续在每分钟的01秒时执行一次我们的任务

实验楼

我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈

sudo tail -f /var/log/syslog

从图中我们可以看到分别在10点18、19、20、21、22、23分的01秒为我们在 shiyanlou 用户的家目录下创建了文件 实验楼

当我们并不需要这个任务的时候我们可以使用这么一个命令去删除任务

crontab -r

通过图中我们可以看出我们删除之后再查看任务列表,系统已经显示该用户并没有任务哦

实验楼

二、crontab 的深入

这个 crontab -e 是针对使用者的 cron 來设计的,也就是每个用户在添加任务,就会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样可以做到隔离,独立,不会混乱。

实验楼

如果是系統的例行性任務時,该怎么办呢?是否还是需要以 crontab -e 來管理你的例行性工作排程呢?当然不需要,你只要编辑 /etc/crontab 這個档案就可以啦!有一點需要特別注意喔!那就是 crontab -e 這個 crontab 其实是 /usr/bin/crontab 这个执行的,只是你可以 root 的身份編輯一下这个文档!

基本上, cron 这个服务的最低侦测限制是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的资料內容 』,因此,只要你编辑完 /etc/crontab 这个文档,并且將他存储之后,那么 cron 的设定就自动的执行了!

在/etc目录下,我们可以观察到关于 cron 的文件有一下几个,他们的作用又是什么

实验楼

  1. /etc/cron.daily,目录下的脚本会每天让执行一次,在每天的6点25分时运行;
  2. /etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的17分钟时运行;
  3. /etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月1号的6点52分时运行;
  4. /etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的6点47分时运行;

当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改。

更多的相关知识我们可以用上节所学到的man命令来查看,

进一步学习参考

当然若想进一步的学习该知识或者相关知识可查看鸟哥私房菜

鸟哥私房菜

三、实验总结

本节我们讲解了 crontab 的一些简单的应用和一些简单的概念。crontab 是 Linux 系统中添加计划任务,定时执行一些必要的脚本所必不可少的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值