crontab是linux内一个任务计划工具,它可以定时去执行你要做的动作.
1.启动、关闭服务: service crond start service crond stop service crond restart 2. 编辑计划任务 crontab -u 指定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数,例如:root想查看user1的计划任务:crontab -u user1 -l crontab -l 列出计划任务的详细内容 crontab -r 删除计划任务,小心使用。 crontab -e 编辑计划任务,是个vi界面。 3.计划任务格式 #分 时 日 月 周 执行命令 分钟[0,59],小时[0,23],日期[1,31] ,月[1,12],周[0,6],可以使用的参数有 “*”,“/”,“-”和“,”。 * 表示任意取值范围内数字 在分钟里*表示0到59的任意数字 - 表示选择区域范围内的数字 3-10表示3-10的任意数字,包含3和10 , 选择数字 2,4,5 选择2,4,5 / 每多少数字 在分钟里 */2表示每二分钟 4.例子: 每1分钟执行一次command * * * * * command 每小时的第3和第15分钟执行 3,15 * * * * command 在上午8点到11点的第3和第15分钟执行 3,15 8-11 * * * command 每隔两天的上午8点到11点的第3和第15分钟执行 3,15 8-11 */2 * * command 每个星期一的上午8点到11点的第3和第15分钟执行 3,15 8-11 * * 1 command 每晚的21:30重启smb 30 21 * * * /etc/init.d/smb restart 每月1、10、22日的4 : 45重启smb 45 4 1,10,22 * * /etc/init.d/smb restart 每周六、周日的1 : 10重启smb 10 1 * * 6,0 /etc/init.d/smb restart 每天18 : 00至23 : 00之间每隔30分钟重启smb 0,30 18-23 * * * /etc/init.d/smb restart 每星期六的晚上11 : 00 pm重启smb 0 23 * * 6 /etc/init.d/smb restart 每一小时重启smb * */1 * * * /etc/init.d/smb restart 晚上11点到早上7点之间,每隔一小时重启smb * 23-7/1 * * * /etc/init.d/smb restart 每月的4号与每周一到周三的11点重启smb 0 11 4 * mon-wed /etc/init.d/smb restart 一月一号的4点重启smb 0 4 1 jan * /etc/init.d/smb restart 01 * * * * root run-parts /etc/cron.hourly 每小时执行/etc/cron.hourly目录内的脚本 run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了 5. crontab与环境变量 不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点: 1)脚本中涉及文件路径时写全局路径; 2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如: cat start_cbp.sh #!/bin/sh source /etc/profile export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf /usr/local/jboss-4.0.5/bin/run.sh -c mev & 3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如: 0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh 6. 其他应该注意的问题 1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。 2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。 3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。 4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。 5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。