yuandan 发表于 2017-5-18 12:40:29

contab 使用方法 定时运行perl

crontab -e也可以直接编辑时程表来运行。

说明 : crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
  
参数 : -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)  
-r : 删除目前的时程表  
 -l : 列出目前的时程表
-----------------------------------------------------------------------------------------------------------------------------------------------
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。在命令行输入$: crontab cronfile_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程序。
0 19 27,28 8 * /usr/bin/perl /home/kankan/ShopStyleTest/code/bin/crawler.pl beams_jp

########################################################################################################
c r o n t a b文件每个条目中各个域的意义和格式:
第1列分钟1~5 9
第2列小时1~2 3(0表示子夜)
第3列日1~3 1
第4列月1~1 2
第5列星期0~6(0表示星期天)
第6列要运行的命令

下面是c r o n t a b的格式:
分<>时<>日<>月<>星期<>要运行的命令
其中<>表示空格

这里有c r o n t a b文件条目的一些例子:
30 21 * * * /apps/bin/cleanup.sh
上面的例子表示每晚的21:3 0运行/a p p s/b i n目录下的cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h。
页: [1]
查看完整版本: contab 使用方法 定时运行perl