- Linux 基础入门(新版)
- C 语言实现 Linux Shell 命令解释器
- C 语言实现 Linux touch 命令
- C 语言实现多线程排序
- 多线程生产者消费者模型仿真停车场
- 在 Github Pages 上部署自己的简历
- Linux 系统安装及配置邮件服务器
- Shell 脚本实现 Linux 系统监控
- C 语言实现 Linux 网络嗅探器
- Vim 编辑器
- Ansible 基础教程
- C 语言实现聊天室软件
- Linux 防火墙技术
- Linux 系统搭建及配置 DNS 服务器
- Linux 系统监控实战
- 操作系统原理与实践
- 实验环境的工作模式
- 使用方法
- Linux 系统安装配置版本控制服务器
- LAMP 部署及配置
- Linux 内核分析
- 正则表达式基础
- TCP/IP 网络协议基础
- Linux Web 运维(Nginx)实战
- Linux 命令实例练习
- 高级 Bash 脚本编程指南
- Memcache 基础教程
- 操作系统实验-基于 uCore OS
- Linux 系统编程
第 9 节 Linux 任务计划 crontab
实验介绍
我们时常会有一些定期定时的任务,如周期性的清理一下/tmp,周期性的去备份一次数据库,周期性的分析日志等等。而且有时候因为某些因素的限制,执行该任务的时间会很尴尬。本课程将带你很好的利用 Linx 系统的计划工具
实验涉及的知识点
- crontab 的认识与使用
一、crontab 的使用
crontab 简介
crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。
通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。
crontab 准备
crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了(在本实验环境中需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动)
sudo 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 的文件有一下几个,他们的作用又是什么
- /etc/cron.daily,目录下的脚本会每天让执行一次,在每天的 6 点 25 分时运行;
- /etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的 17 分钟时运行;
- /etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月 1 号的 6 点 52 分时运行;
- /etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的 6 点 47 分时运行;
当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改。
更多的相关知识我们可以用上节所学到的 man 命令来查看,
进一步学习参考
当然若想进一步的学习该知识或者相关只是可查看鸟哥私房菜
三、实验总结
本节我们讲解了 crontab 的一些简单的应用和一些简单的概念。crontab 是 Linux 系统中添加计划任务,定时执行一些必要的脚本所必不可少的工具。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论