Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1277371
  • 博文数量: 129
  • 博客积分: 1449
  • 博客等级: 上尉
  • 技术积分: 3048
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-24 18:36
文章分类

全部博文(129)

文章存档

2015年(3)

2014年(20)

2013年(65)

2012年(41)

分类: LINUX

2013-03-22 11:09:25


cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序。例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行。


服务的启动和停止

cron服务是linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:

/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload

以上1-4行分别为启动、停止、重启服务和重新加载配置。

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可。


查看、编辑和删除

cron把命令行保存在crontab(cron table)文件里,这个文件通常在 /etc 目录下。每个系统用户都可以有自己的crontab(在 /var/spool/cron/ 下)。要查看当前用户的crontab,输入 crontab -l;要编辑crontab,输入 crontab -e;要删除crontab,输入 crontab -r。如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后加上 -u USERNAME(如 crontab -e -u USERNAME)即可。crontab文件的默认编辑器是vi,可以输入 export VISUAL=’editor’ 更改默认编辑器。

cron服务每分钟不仅要读一次 /var/spool/cron 目录内的所有文件,还需要读一次 /etc/crontab 文件。配置这个文件也能让cron执行任务。使用crontab命令是对用户级任务的配置,而编辑 /etc/crontab 文件是对系统级任务的配置

  • 查看当前用户的cron配置,使用 crontab -l
  • 编辑当前用户的cron配置,使用 crontab -e
  • 删除当前用户的cron配置,使用 crontab -r
  • 以root身份查看/编辑/删除某用户的cron配置,在命令后加上 -u USERNAME
  • 配置系统级的任务,编辑 /etc/crontab 文件

基本格式 :
*  *  *  *  * command
分  时  日  月 周 命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

还可以用一些特殊符号:

       * 表示任何时刻

       ,: 表示分割

  -:表示一个段,如第二端里: 1-5,就表示15

       /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.


#crontab -e

 0 02 * * * /usr/sbin/bakmysql.sh     每天02点执行mysql备份脚本

示例:

43 21 * * *               21:43 执行

15 05 * * *             05:15 执行

0 17 * * *                17:00 执行

0 17 * * 1                每周一的 17:00 执行

0,10 17 * * 0,2,3         每周日,周二,周三的 17:00 17:10 执行

0-10 17 1 * *             毎月1日从 17:007:10 毎隔1分钟 执行

0 0 1,15 * 1              毎月1日和 15日和 一日的 0:00 执行

42 4 1 * *              毎月1日的 4:42 执行

0 21 * * 1-6            周一到周六 21:00 执行

0,10,20,30,40,50 * * * * 每隔10 执行

*/10 * * * *        每隔10 执行

* 1 * * *         1:01:59 每隔1分钟 执行

0 1 * * *         1:00 执行

0 */1 * * *        毎时0 每隔1小时 执行

0 * * * *         毎时0 每隔1小时 执行

2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行

30 5 1,15 * *       1  15日的 5:30 执行


#/etc/init.d/crond restart


2.3  后台执行命令 

       当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。  如:

       30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh & 

       在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。

       不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:如:

              command >out.file 2>&1 & 

       在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

 

2.4  2>&1 含义 

先看一个例子:

0 2 * * * /u01/test.sh >/dev/null 2>&1 & 

这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。 

在这里有有几个数字的意思:0表示键盘输入, 1表示标准输出, 2表示错误输出.  

我们也可以这样写:

0 2 * * * /u01/test.sh  >/u01/out.file &  --这里没写,默认是1

0 2 * * * /u01/test.sh  1>/u01/out.file &

0 2 * * * /u01/test.sh  2>/u01/out.file &

0 2 * * * /u01/test.sh  2>/u01/out.file  2>&1 &

 

tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。

 

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file

&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1 

:后台执行

 

测试:

ls 2>1  不会报没有2文件的错误,但会输出一个空的文件1

ls xxx 2>1 没有xxx这个文件的错误输出到了1中;

ls xxx 2>&1 不会生成1这个文件了,不过错误跑到标准输出了;

ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1  因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt 文件中。

  

2.5  2>&1写在后面的原因

       格式:command > file 2>&1   == command  1> file 2>&1 

       首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。 

如果改成: command 2>&1 >file

       2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。


WR703N上实验OK, 每隔1分钟将当前时间输出到文件
1) 用UE在PC上建立 root文件, 内容如下:
    */1 * * * * date >> /xutest/test.txt
2)/etc/init.d/cron stop
3)wincp 将 root 上传到 /etc/crontabs 目录下
4)/etc/init.d/cron start

然后就可以看到相关的文件的内容 

root@OpenWrt:/xutest# cat test.txt
Thu Sep  8 20:23:01 UTC 2011
Thu Sep  8 20:24:01 UTC 2011
Thu Sep  8 20:25:01 UTC 2011
Thu Sep  8 20:26:01 UTC 2011
Thu Sep  8 20:27:01 UTC 2011
Thu Sep  8 20:28:01 UTC 2011
Thu Sep  8 20:29:01 UTC 2011
Thu Sep  8 20:30:01 UTC 2011
Thu Sep  8 20:31:01 UTC 2011
Thu Sep  8 20:32:01 UTC 2011

root@OpenWrt:/xutest# date
Thu Sep  8 21:09:57 UTC 2011


--- /etc/init.d/cron 中的内容如下:
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=50
SERVICE_USE_PID=1

start () {
    loglevel=$(uci_get "system.@system[0].cronloglevel")
    [ -z "$(ls /etc/crontabs/)" ] && exit 1
    mkdir -p /var/spool/cron
    ln -s /etc/crontabs /var/spool/cron/ 2>/dev/null
    service_start /usr/sbin/crond -c /etc/crontabs -l ${loglevel:-5}
}

stop() {
    service_stop /usr/sbin/crond
}


参考
http://blog.csdn.net/tianlesoftware/article/details/5315039




阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~