<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=%E4%BD%BF%E7%94%A8crontab%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1</id>
	<title>使用crontab自动执行任务 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://www.mywiki.cn/Hovercool/index.php?action=history&amp;feed=atom&amp;title=%E4%BD%BF%E7%94%A8crontab%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1"/>
	<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=%E4%BD%BF%E7%94%A8crontab%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1&amp;action=history"/>
	<updated>2026-09-01T05:33:42Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.mywiki.cn/Hovercool/index.php?title=%E4%BD%BF%E7%94%A8crontab%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1&amp;diff=772&amp;oldid=prev</id>
		<title>2015年5月6日 (三) 08:04 Hovercool</title>
		<link rel="alternate" type="text/html" href="https://www.mywiki.cn/Hovercool/index.php?title=%E4%BD%BF%E7%94%A8crontab%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1&amp;diff=772&amp;oldid=prev"/>
		<updated>2015-05-06T08:04:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;color:#ca6500;font-size:110%&amp;quot;&amp;gt;&lt;br /&gt;
(草稿版，待完善...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。&lt;br /&gt;
&lt;br /&gt;
=== 1.以某一频率执行任务 ===&lt;br /&gt;
&lt;br /&gt;
linux缺省会启动crond进程，crond进程不需要用户启动、关闭。crond进程负责读取调度任务并执行，用户只需要将相应的调度脚本写入cron的调度配置文件中。&lt;br /&gt;
&lt;br /&gt;
cron的调度文件有以下几个：&lt;br /&gt;
&lt;br /&gt;
    crontab&lt;br /&gt;
    cron.d&lt;br /&gt;
    cron.daily&lt;br /&gt;
    cron.hourly&lt;br /&gt;
    cron.monthly&lt;br /&gt;
    cron.weekly &lt;br /&gt;
&lt;br /&gt;
如果用的任务不是以hourly monthly weekly方式执行，则可以将相应的crontab写入到crontab 或cron.d目录中。&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&lt;br /&gt;
需要每隔一分钟执行一次脚本&amp;quot;/opt/bin/test-cron.sh&amp;quot;，可以在cron.d新建脚本文件&amp;quot;echo-date.sh&amp;quot;，内容为：&lt;br /&gt;
&lt;br /&gt;
 */1 * * * * root  /opt/bin/test-cron.sh&lt;br /&gt;
&lt;br /&gt;
=== 2.在指定的时间运行任务 ===&lt;br /&gt;
&lt;br /&gt;
(1)通过at命令来控制在指定的时间运行任务&lt;br /&gt;
&lt;br /&gt;
如：&lt;br /&gt;
&lt;br /&gt;
 $:at -f test-cron.sh -v 10:25&lt;br /&gt;
&lt;br /&gt;
其中-f 指定脚本文件， -v 指定运行时间&lt;br /&gt;
&lt;br /&gt;
(2)更改contab实现&lt;br /&gt;
&lt;br /&gt;
首先导出contab的配置：&lt;br /&gt;
&lt;br /&gt;
 $:contab -l &amp;amp;gt;contabs.tmp&lt;br /&gt;
&lt;br /&gt;
然后编辑contabs.tmp文件。以一下格式添加一行：&lt;br /&gt;
&lt;br /&gt;
分钟 小时 天 月 星期 命令&lt;br /&gt;
&lt;br /&gt;
如：&lt;br /&gt;
&lt;br /&gt;
10 3 * * 0,6 hello&lt;br /&gt;
&lt;br /&gt;
就是每周六、周日的3点10分执行hello程序。&lt;br /&gt;
&lt;br /&gt;
15 4 * * 4-6 hello&lt;br /&gt;
&lt;br /&gt;
就是从周四到周六的4点15点执行hello程序。&lt;br /&gt;
&lt;br /&gt;
然后将更改导回contab：&lt;br /&gt;
&lt;br /&gt;
 $:contab contabs.tmp&lt;br /&gt;
&lt;br /&gt;
ps.一般不建议直接修改/etc/下的相关配置文件。&lt;br /&gt;
&lt;br /&gt;
启动cron进程的方法：/etc/init.d/crond start&lt;br /&gt;
&lt;br /&gt;
开机就启动cron进程的设置命令：chkconfig --add crond&lt;br /&gt;
&lt;br /&gt;
方法二：&lt;br /&gt;
&lt;br /&gt;
把cron加入到启动脚本中：&lt;br /&gt;
&lt;br /&gt;
 # rc-update add vixie-cron default&lt;br /&gt;
&lt;br /&gt;
 $:crontab -l #查看你的任务&lt;br /&gt;
&lt;br /&gt;
 $:crontab-e#编辑你的任务&lt;br /&gt;
&lt;br /&gt;
 $:crontab-r#删除用户的crontab的内容&lt;br /&gt;
&lt;br /&gt;
实例讲解二：&lt;br /&gt;
&lt;br /&gt;
系统cron设定：/etc/crontab&lt;br /&gt;
&lt;br /&gt;
通过 /etc/crontab 文件，可以设定系统定期执行的任务，当然，要想编辑这个文件，得有root权限&lt;br /&gt;
&lt;br /&gt;
0 7   *    *   *    root    mpg123 ~/wakeup.mp3&lt;br /&gt;
&lt;br /&gt;
分 时 日 月 周&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&lt;br /&gt;
0 4  * * 0     root emerge --sync &amp;amp;&amp;amp; emerge -uD world              #每周日凌晨4点，更新系统&lt;br /&gt;
&lt;br /&gt;
0 2 1 * *     root   rm -f /tmp/*      #每月1号凌晨2点，清理/tmp下的文件&lt;br /&gt;
&lt;br /&gt;
0 8 6 5 *   root     mail  robin &amp;lt; /home/galeki/happy.txt             #每年5月6日给robin发信祝他生日快乐&lt;br /&gt;
&lt;br /&gt;
假如，我想每隔2分钟就要执行某个命令，或者我想在每天的6点、12点、18点执行命令，诸如此类的周期，可以通过 “ / ” 和 “ , ” 来设置：&lt;br /&gt;
&lt;br /&gt;
*/2   *   *   *   *           root      ...............      #每两分钟就执行........&lt;br /&gt;
&lt;br /&gt;
0 6,12,18   *   *   *    root      ...............      #每天6点、12点、18点执行........&lt;br /&gt;
&lt;br /&gt;
每两个小时&lt;br /&gt;
&lt;br /&gt;
0 */2 * * * echo &amp;quot;have a break now.&amp;quot; &amp;gt;&amp;amp;gt; /tmp/test.txt&lt;br /&gt;
&lt;br /&gt;
晚上11点到早上8点之间每两个小时，早上八点&lt;br /&gt;
&lt;br /&gt;
0 23-7/2，8 * * * echo &amp;quot;have a good dream：）&amp;quot; &amp;amp;gt;&amp;amp;gt; /tmp/test.txt&lt;br /&gt;
&lt;br /&gt;
每个月的4号与每个礼拜的礼拜一到礼拜三的早上11点&lt;br /&gt;
&lt;br /&gt;
0 11 4 * 1-3 command line&lt;br /&gt;
&lt;br /&gt;
1月1日早上4点&lt;br /&gt;
&lt;br /&gt;
0 4 1 1 * command line&lt;br /&gt;
&lt;br /&gt;
=== 3.常见陷阱 ===&lt;br /&gt;
&lt;br /&gt;
每个SA、DBA 或者是普通的 Unix 用户，在第一次使用 Crontab 的时候都会遇到问题. 运行 Crontab 的常见错误包括如下几种:&lt;br /&gt;
&lt;br /&gt;
1) 出于测试目的新创建了一条 Cron JOB, 时间间隔必须超过两分钟，否则 JOB 将调度不到。如果必须忽略这两分钟的载入配置时间差，可以通过重新启动 Cron Daemon 做到。&lt;br /&gt;
&lt;br /&gt;
2) 从 Crontab 中启动 X Window 程序需要注意的事项：所以要么在程序前初始化 &amp;quot;DISPLAY=:0.0&amp;quot;, 要么在应用程序后面追加参数 --display :0.0&lt;br /&gt;
&lt;br /&gt;
3) 命令中的 % 必须做转义处理: \% .我个人的意见是不要在命令行里带这个参数，干脆写到脚本里，然后调度该脚本即可。&lt;br /&gt;
&lt;br /&gt;
其实我倒是认为使用 Crontab 最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问：为什么我的 Crontab 创建了不执行? 准备创建一条 Cron JOB 的时候，很多人都喜欢在命令行下运行一遍，因为这个时候环境变量是随着 Shell 自动带进来，在 Crontab 中则可能因为找不到正确的环境变量，JOB 就不能执行。这个小问题就像出天花，一次教训之后就都记得了。&lt;br /&gt;
&lt;br /&gt;
=== 4.必须使用的一则技巧 ===&lt;br /&gt;
&lt;br /&gt;
每条 JOB 执行完毕之后，系统会自动将输出发送邮件给当前系统用户，日积月累，非常的多，甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的： &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。&lt;br /&gt;
&lt;br /&gt;
附: Crontab 的格式说明如下:&lt;br /&gt;
&lt;br /&gt;
* 逗号(&amp;#039;,&amp;#039;) 指定列表值。如: &amp;quot;1,3,4,7,8&amp;quot;&lt;br /&gt;
* 中横线(&amp;#039;-&amp;#039;) 指定范围值 如 &amp;quot;1-6&amp;quot;, 代表 &amp;quot;1,2,3,4,5,6&amp;quot;&lt;br /&gt;
* 星号 (&amp;#039;*&amp;#039;) 代表所有可能的值&lt;br /&gt;
&lt;br /&gt;
Linux(开源系统似乎都可以)下还有个 &amp;quot;/&amp;quot; 可以用. 在 Minute 字段上，*/15 表示每 15 分钟执行一次. 而这个特性在商业 Unix ，比如 AIX 上就没有.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Use the hash sign to prefix a comment &lt;br /&gt;
# +---------------- minute (0 - 59) &lt;br /&gt;
# |  +------------- hour (0 - 23) &lt;br /&gt;
# |  |  +---------- day of month (1 - 31) &lt;br /&gt;
# |  |  |  +------- month (1 - 12) &lt;br /&gt;
# |  |  |  |  +---- day of week (0 - 7) (Sunday=0 or 7) &lt;br /&gt;
# |  |  |  |  | # *  *  *  *  *  command to be executed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
参考资料：&lt;br /&gt;
&lt;br /&gt;
http://liguxk.blog.51cto.com/129038/123555&lt;br /&gt;
&lt;br /&gt;
http://www.cnblogs.com/end/archive/2012/02/21/2361741.html&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Crontab&lt;/div&gt;</summary>
		<author><name>Hovercool</name></author>
	</entry>
</feed>