最近使用到crontab命令,用它来进行作业的定时自动提交,遇到了一些问题,最后解决了。记录一下~~
(1)首先将要执行的文件打成jar包 MongoConf.jar,放到/home/auto目录下面,建立脚本文件MongoConf.sh,建立日志文件run.log存储产生的日志信息。
(2)编辑MongoConf.sh
<span style="font-family:Microsoft YaHei;font-size:14px;">#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/bin:/sbin:/usr/sbin:/usr/bin
cd /home/auto/
/home/jdk1.6.0_31/bin/java -jar MongoConf.jar -cp /home/jdk1.6.0_31/lib/tools.jar:/home/jdk1.6.0_31/lib/dt.jar</span>
注意此处路径要按照自己机器jdk实际路径写,写完后可以./MongoConf.sh先测试下脚本是否能正常运行;
(3)设置系统变量crontab
crontab常用的三个命令
查看cron是否在运行:service cron status
显示当前通过crontab设定的所有任务调度:crontab -l
编辑任务配置文件:crontab -e
删除任务:crontab -r (会删除所有的任务)
配置文件:/etc/crontab
//(试了好多次,改了/etc/crontab 和 crontab -e 不知道是哪个起作用了,都改成一样的噢啦)
使用命令
<span style="font-family:Microsoft YaHei;font-size:14px;">crontab -l</span>
发现no crontab for root
然后使用命令
<span style="font-family:Microsoft YaHei;font-size:14px;">crontab -e</span>
出现no crontab for root – using an empty one
a:然后会叫你“Select a editor ……”下面有几个选项,就是叫你选择编辑器,选择vi(我的木有这项)
进入crontab编辑页面之后就直接”shift+:”,然后输入wq保存即可。
b:我使用的这项。crontab默认选择nano编辑器是可以编辑的 但是一旦选错了就瞎了~ 错误代码no crontab for root - using an empty one 解决 修改crontab默认编辑器为vi或者其他的编辑器。 法一:export EDITOR="/usr/bin/vim" ; crontab -e 法二: 执行命令:select-editor ...
然后一个新的crontab就生成了。
(假设用户为root,在ubuntu中计划任务配置文件是/var/spool/cron/crontabs/root中)
(4)按照crontab的语法写自己要运行的程序。
00 01 * * * /home/auto/MongoConf.sh >>/home/auto/run.log 2>&1 &
(5)重新启动crontab服务
service cron restart
(6)终止任务 crontab -r
如何调度多个任务?
(1)在crontab -e 中直接写
局限性:多而乱
(2)可以把所有的任务写入到一个可执行文件,即.sh文件(shell编程)
* * * * /home/auto/task.sh
同一个时间执行多个任务
crontab在php中的应用:
(1)在Crontab中使用URL执行脚本
当我们需要定时去调用某个本机的或者是远程的web程序时,可以这样设置crontab
0 5 * * * /usr/bin/curl http://www.xmsdn.net/it-net/linux/linux-curl-crontab
此处 ”0 5 * * * ” 表示每天早上的5点钟定时访问上面的url 链接,将其加入到你的 crontab 替代文件中.
也可以使用lynx和wget
00 * * * * lynx -dump http://www.jb51.net/myscript.php
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.jb51.net/myscript.php
(2)当我们需要定时执行某个系统内的php脚本程序时,可以这样设置crontab
* 19 * * * /usr/local/php/bin/php /var/www/test.php
此处表示调用php(因为是安装在"/usr/local/php/bin"这个目录下),每天的下午7点执行web目录下test.php
*/5 * * * * www /usr/local/php/bin/php /data/project/project_test.php >>/dev/null 2>&1
即每隔5分钟以www用户身份执行/data/project/project_test.php文件,注:PHP程序的执行需要Apache用户(比如www:www)的支持,所以这里的用户建议是www用户,即运行Apache的用户;当然了,www用户对此php是有755权限。
>>/dev/null 2>&1 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息,防止/var/spool被大量垃圾信息占满,影响磁盘的正常运作。