原帖地址:http://www.roboticfan.com/blog/user_2005/104/2010129213113.shtml
Linux定时任务系统Cron使用总结
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start
/etc/crontab 文件配置cron cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还要每分钟读一次/etc/crontab,因此我们配置这个文件也能运用 cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。
每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。
不能直接编辑修改文件/etc/crontab,要用 crontab -e 编辑/安装,而不是直接修改 /etc/crontab 。安装好的 crontab 可以用 crontab -l 查看,并不在 /etc/crontab 里面(在 debian 系统里是在 /var/spool/cron/crontabs/ 下面,每个用户都可以有自己的
如果直接编辑,就会遇到如下的问题,ant 命令在cron里无效,但在命令行里有作用
我在/etc/crontab里面写了这么一段:
00 20 * * * root ant -file /home/ant/antcvs/build.xml
用来自动运行ant命令,可是没有反应,第二天一看,并没有运行
/etc/crontab
00 21 * * * root perl /home/devtest/work/deploy.pl -r WebServer/branch -d WebDesign/GagmeData/DevGameData -b 1.2.10 >> /home/devtest/work/deploy.log 2>&1
记住2>&1很有用,会打印出一些标准输入输出中的异常信息
新增内容:crontab -e ,不需要再加root 账户名
00 21 * * * perl /home/devtest/work/deploy.pl -r WebServer/branch -d WebDesign/GagmeData/DevGameData -b 1.2.10 >> /home/devtest/work/deploy.log 2>&1
为21点去执行这个命令行,执行打印结果追加到deploy.log 需要改动的是大分支版本号1.2.10
. tail -f /var/log/cron 查看crontab的运行日志
如果加入cron任务的命令行或者程序有用到环境变量的,比如ant,perl,svn,则需要在最开始加入环境变量
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/j2sdk1.4//bin [最好把全部的从环境变量中拷贝过来]
MAILTO=root
HOME=/root
发现SVN在cron里也无效,但命令行中有效,查得原因如下:
1.需要在svn 命令里加password username
2.编码的问题,则需要在环境变量中LANG=zh_CN.UTF-8