解析Ubuntu下crontab命令的用法


Posted in PHP onJune 24, 2013

cron是一个Linux下的后台进程,用来定期的执行一些任务。因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多。

想要让cron执行你指定的任务,首先就要编辑crontab文件。crontab是一个文本文件,用来存放你要运行的命令。你可以以下命令
crontab -e 
来打开你的用户所属的crontab文件。第一次用这个命令,会让你选择文本编辑器,我选的是vim。选定的编辑器也可以使用
select-editor 
命令来更改。这点命令行中已经有足够的提示,就不多说了。

打开后的crontab文件类似这种样子:
# m h  dom mon dow   command 
*/2 * * * * date >> ~/time.log 
第二行是我为了测试写的一个定期任务,它的意思是,每隔两分钟就执行 date >> ~/time.log 命令(记录当前时间到time.log文件)。你可以把它加入你的crontab中,然后保存退出。

保存了crontab之后,我们还需要重启cron来应用这个计划任务。使用以下命令:
sudo service cron restart
下面稍微解释下crontab中每行的含义。crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:

分钟          0 - 59
小时          0 - 23
天              1 - 31
月              1 - 12
星期          0 - 6       0表示星期天

除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:

星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)
逗号          可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟
斜线          一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 */2 代表每隔两分钟。所以 */1 和 * 没有区别
                  */2 可以看成是能被2整除的任意值。

以下是一些例子(省略了命令部分):
* * * * *                  # 每隔一分钟执行一次任务 
0 * * * *                  # 每小时的0点执行一次任务,比如6:00,10:00 
6,10 * 2 * *            # 每个月2号,每小时的6分和10分执行一次任务 
*/3,*/5 * * * *          # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06
以上就是在cron中加入计划任务的基本知识。因为cron中的任务基本就是执行命令行,所以当然也会有权限问题。以上例子中的任务就是以你当前登录用户的权限执行的,如果你需要以root用户执行某个任务,可以在crontab前加上sudo。
sudo crontab -e 
顺带一提,crontab文件对每个用户都是不同的,所以刚才设置的定期看时间的任务,在这里是看不到的。因为我们没有为root用户增加这样的计划任务。

再顺带一提,不喜欢命令行的童鞋可以去 Ubuntu软件中心 下一个 计划任务 程序。在软件中心中搜索 schedule 就可以搜到。它是一个GUI的程序,做的还蛮傻瓜化的。不过好像没办法设置成使用root用户运行任务。而且,对于要ssl到服务器上进行操作的童鞋来说,命令行还是最好(唯一)的工具。

因为我目前就用到这些知识,所以对cron也没有更多了解。想了解Ubuntu下的cron的童鞋,可以去看看Ubuntu官方的这篇 CronHowTo ,个人觉得讲的还是蛮详细的。

PHP 相关文章推荐
php 禁止页面缓存输出
Jan 07 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
php简单生成随机数的方法
Jul 30 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 PHP
关于crontab的使用详解
Jun 24 #PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 #PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 #PHP
解析argc argv在php中的应用
Jun 24 #PHP
解析func_num_args与func_get_args函数的使用
Jun 24 #PHP
php常用ODBC函数集(详细)
Jun 24 #PHP
php常用Stream函数集介绍
Jun 24 #PHP
You might like
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python实现人脸识别代码
2017/11/08 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
浅析python参数的知识点
2018/12/10 Python
实例详解Python模块decimal
2019/06/26 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
Servlet方面面试题
2016/09/28 面试题
优秀班组长事迹
2014/05/31 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
中学社团活动总结
2015/05/07 职场文书
学校食堂管理制度
2015/08/04 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书