解析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将数据导入到Foxmail
Oct 09 PHP
文章推荐系统(二)
Oct 09 PHP
php数据库密码的找回的步骤
Jan 12 PHP
Views rows style模板重写代码
May 16 PHP
php引用返回与取消引用的详解
Jun 08 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
浅谈PHP中的Trait使用方法
Mar 22 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连表查询及数据导出方法示例
2016/10/15 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
python代码过长的换行方法
2018/07/19 Python
python 获取等间隔的数组实例
2019/07/04 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
用Python 执行cmd命令
2020/12/18 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
计算机维护专业推荐信
2014/02/27 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
CSS 伪元素::marker详解
2021/06/26 HTML / CSS