Cron是Linux内置的定时执行工具.
使用 ps -elf|grep cron 查看cron是否运行
如果服务没有启动,可使用下面的命令.
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
想了解cron 什么时候被唤醒开始运行它的任务,可以查看/etc/crontab
cat /etc/crontab
内容大概如下
- # run-parts
- 01 * * * * root run-parts /etc/cron.hourly
- 02 4 * * * root run-parts /etc/cron.daily
- 22 4 * * 0 root run-parts /etc/cron.weekly
- 42 4 1 * * root run-parts /etc/cron.monthly
每列的顺序表示:
[第一列] 分钟(0-59)
[第二列] 小时(0-23)
[第三列] 日期(1-31)
[第四列] 月份(1-12)
[第五列] 星期(从0-6 分别表示星期天到星期六)
除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题:
- #每天早晨6点执行。 '>>' 表示输出信息追加到/tmp/test.txt中
- 0 6 * * * echo "Good morning." >> /tmp/test.txt
- #每两个小时执行
- 0 */2 * * * echo "Hello World." >> /tmp/test.txt
- #每分钟执行一次
- */1 * * * * echo "Hello World." >> /tmp/test.txt
- #每周(星期一,星期三,星期五)的早晨4:02分执行
- 02 4 * * 1,3,5 echo "Hello World." >> /tmp/test.txt
- #每个月的4号和每周的周一到周三的早上11点执行
- 0 11 4 * 1-3 echo "Hello World." >> /tmp/test.txt
明白了时间设置格式,现在来设置cron服务
最常用的cron命令:
crontab -l //显示已经存在的cron任务
crontab -e //编辑某个用户的cron任务列表
crontab -u //设定某个用户的cron服务
crontab -r //删除某个用户的cron服务
下面是我使用cron的过程
首先用crontab -e 加入我的定时任务.(crontab -e 可以对提交的作业进行语法检查) , 这是一个类似 vi 的环境,输入
*/1 * * * * /home/myJava/mycode.sh
然后:x保存退出
接着用crontab -l 查看一下, 确认任务制定成功, 等了1分钟,却没有看到程序的log输出, 下面是mycode.sh
- /usr/local/ant/bin/ant -f /home/myJava/build.xml mytest
单独执行mycode.sh没有问题, 查看cron的运行日志
tail -f /var/log/cron
看到mycode.sh已经执行了, 在看看cron执行信息, cron会把任何输出都email到root的信箱.
tail -f /var/spool/mail/root
看到Error: JAVA_HOME is not defined correctly. We cannot execute java,
可使用 echo $JAVA_HOME 可以看到java home啊, 百度一下, 有人说cron里的命令必须都是绝对路径的.修改sh如下
- export JAVA_HOME=/usr/java/jdk1.5.0_07
- /usr/local/ant/bin/ant -f /home/myJava/build.xml mytest
OK, 数据库有新数据了, tail -f /var/spool/mail/root 也能看到ant的输出, 可java程序中用log4j打的log却没有
在网上没有找到好的解决方法, 暂时使用一个折中方式, 修改cron任务,把log输出到指定文件
- */1 * * * * /home/myJava/mycode.sh >> /home/myJava/myLog.log
相关连接
http://www.chinaunix.net/jh/7/104984.html
http://blog.21club.cn/blog.php?uid-1-do-showone-tid-58-page-1.html