contab 使用方法 定时运行perl
crontab-e也可以直接编辑时程表来运行。
说明:crontab是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。
-uuser是指设定指定user的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他人的时程表。如果不使用-uuser的话,就是表示设定自己的时程表。
参数:-e[UserName]:执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器(比如说setenvVISUALjoe)
-r[UserName]:删除目前的时程表
-l[UserName]:列出目前的时程表
-----------------------------------------------------------------------------------------------------------------------------------------------
1.用VI编辑一个文件cronfile_test(名字随便起),然后在这个文件中输入格式良好的时程表。编辑完成后,保存并退出。
cronfile_test文件的内容:
* * * * * /usr/bin/perl /kankan/test.pl
test.pl:
open (RW,">>/kankan/log.txt"); print RW "abc\n"; close RW;
在crontab里面最好使用绝对路径
*****/usr/bin/perl/kankan/test.pl
另外你的脚本test.pl里面,如果可能也使用绝对路径,或者在脚本的开头chroot到当前路径。
2。在命令行输入$:crontabcronfile_test,这样就将cronfile文件提交给cron进程,同时,新创建cronfile的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名。
此时test.pl就将每分钟执行一次,此方法讲解结束。
----------------------------------------------------------------------------------------------------------------
perl程序经常会发生放在crontab里面不能被执行的现象,因为perl所使用的环境变量为系统的环境变量,而crontab在运行时不使用当前系统的环境变量,因此为了解决这个问题有两种方法:
1、在perl程序里面凡是涉及到执行命令或者读写文件的语句,都要在用绝对路径描述该命令或文件.
2、在crontab-e中指命PATH等环境变量
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
HOME=/var/log
再奉送一个超级无敌解决方法:可以写一个shell脚本,脚本内容是执行perl程序,然后把shell程序放在crontab中#(这个方法真是让人无话可说......)
举例:
表示8月27、28两天的晚上7点0、1、2、3分钟开始运行crawler程序。
01927,288*/usr/bin/perl/home/kankan/ShopStyleTest/code/bin/crawler.plbeams_jp
########################################################################################################
crontab文件每个条目中各个域的意义和格式:
第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令
下面是crontab的格式:
分<>时<>日<>月<>星期<>要运行的命令
其中<>表示空格
这里有crontab文件条目的一些例子:
3021***/apps/bin/cleanup.sh
上面的例子表示每晚的21:30运行/apps/bin目录下的cleanup.sh。
4541,10,22**/apps/bin/backup.sh
上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
101**6,0/bin/find-name"core"-execrm{}\;
上面的例子表示每周六、周日的1:10运行一个find命令。
0,3018-23***/apps/bin/dbcheck.sh
上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
023**6/apps/bin/qtrend.sh
上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。