crontab是linux下的计划任务,能够用来定时或者按计划运行命令。java
1.使用crontab -e命令,直接建立计划任务linux
2.使用编辑器编写好计划任务的文件后,再使用crontab [plan-file],注册计划任务文件。这方法很差的地方在于,每次编辑完计划任务的文件后,都得记得注册一次,不然仍是旧的计划任务。bash
crontab的语法以下:编辑器
* * * * * command to be executed - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59)
例子:this
* * * * * <command> #Runs every minute 30 * * * * <command> #Runs at 30 minutes past the hour 45 6 * * * <command> #Runs at 6:45 am every day 45 18 * * * <command> #Runs at 6:45 pm every day 00 1 * * 0 <command> #Runs at 1:00 am every Sunday 00 1 * * 7 <command> #Runs at 1:00 am every Sunday 00 1 * * Sun <command> #Runs at 1:00 am every Sunday 30 8 1 * * <command> #Runs at 8:30 am on the first day of every month 00 0-23/2 02 07 * <command> #Runs every other hour on the 2nd of July
* */1 * * *<command> #每一小时
* 23-7/1 * * *<command> #晚上11点到早上7点之间,每隔一小时
crontab -lspa
crontab默认会将<command>的结果输出到Linux用户的邮箱(mailbox),在redhat enterprise版本中,mailbox在/var/spool/mail/<user>这里。命令行
每次来这里查看其实不太方便,因此能够让crontab直接输出到某个指定的地方:code
*/10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2>&1
这里的1和2,值得是将STDERR这个输出(standard errors, 用2表示),一并存到STDOUT这个输出里(standard output, 用1表示)blog
crontab -u <user> -e
这样的计划任务,是为某个特定的用户而建立的。不然的话,就算调用Java,也得在命令行里写一堆东西:token
export JAVA_HOME=/usr/java/jdk1.6.0_45 export PROJECT_HOME=/home/derek/clientreporting export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/td.jar:.
补充:
利用linux的命令,能够根据不一样的日子输出crontab的运行结果,而不须要每次都查mailbox(/var/spool/mail/<user>):
30 12 * * * /some/script/to/run.sh > /some/log/name-$(date +"\%F").log
注意,date和+之间有一个空格!!!不然此命令没法输出日期。详细的日期格式能够看这里。