crontab介绍 + 小示例 + crontab不执行的缘由

转自:http://blog.csdn.net/ustcgy/article/details/5275096java

1.Cron的启动与关闭

因为Cron是Linux的内置服务,能够用如下的方法启动.关闭这个服务:linux

/sbin/service crond start //启动服务shell

/sbin/service crond stop //关闭服务app

/sbin/service crond restart //重启服务编辑器

/sbin/service crond reload //从新载入配置测试

2.Cron配置文件

2.1全局配置文件

crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和 crontab,cron.deny二个文件.url

cron.daily是天天执行一次的job,cron.weekly是每一个星期执行一次的job.cron.monthly是每个月执行一次的 job,cron.hourly是每一个小时执行一次的job.cron.d是系统自动按期须要作的任务,可是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面..net

/etc/crontab文件通常以下:命令行

01 * * * * root run-parts /etc/cron.hourlyrest

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

咱们可在此文件中添加本身须要的cron job.

/etc/cron.deny文件就是用于控制不让哪些用户使用Crontab的功能.

2.2用户配置文件

每一个用户都有本身的cron配置文件,经过crontab -e 就能够编辑,通常状况下咱们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.

linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面全部的内容.

3.Cron命令格式

crontab [ -u user ] 文件

crontab [ -u user ] { -l | -r | -e }

-u:指定某一用户

-e:执行文字编辑器来设定用户(当前用户或指定用户)时程表,内定的文字编辑器是vi.

-r:删除用户时程表.

-l:列出用户时程表.

4.Cron文件格式

*  *  *  *  *  command

分 时 日 月 周  命令

第1列表示分钟1~59, 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

5.Cron文件使用说明

5.1 通常状况

当f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其他类推.

* * * * * /bin/usershell  天天每分钟执行一次/bin/usershell

当f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其他类推.

0-12 * * * * /bin/usershell  天天每小时从0到12分钟每分钟执行一次/bin/usershell

当f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其他类推.

* */2 * * * /bin/usershell  天天每2小时执行一次/bin/usershell

当f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其他类推.

* 1,3,5,7 * * * /bin/usershell  天天每逢1,3,4,7点执行一次/bin/usershell

5.2. 冲突逻辑

日期能够用月限定,也能够用“星期”指定,若是两个段有冲突,那么,第六段的命令将在匹配任何一个的状况下都运行,好比

"30 4 1,15 * 5",将在每个月的1号和15号加每一个周五,上午4:30运行.

5.3. 符号"%"

"%"在Cron文件中,有"结束命令行","换行","重定向"的做用,假如不须要"%"的特殊做用,须要使用转义符转义.

5.4. @reboot

这个不须要理解,为了达到在开机后运行,且只运行一次的目的.除了这个,也没法经过前五段的设置来实现. @annually也是这个功能.

至于@yearly,@monthly等等其实均可以用上面的五段来设置.

而后我本身写了一个小例子作了下测试:

使用crontab -e进行编辑,内容为:

*/2 * * * * echo "i am crontab" >> /home/zhang/hello
```

这样隔两分钟就会往hello这个文件里写i am crontab

我本身写了一个脚本task.sh,直接运行task.sh时能够运行,但是加到crontab里就有运行了,后来我查看了网上的解决方法,终于解决了,先来看一下我原来写的task.sh脚本吧:

```
#!/bin/sh
java -jar offergateway.biz.offer-1.0-SNAPSHOT.jar
```


crontab定时任务的写法为:

```
* * * * *  /task.sh
```

后来我查了网上说要运行crontab,必须使用绝对路径,而后我把路径都改为绝对路径了。
在crontab的执行环境变量中,没有相应用户设置的环境变量,你须要手动设置一下环境变量,才能让它生效。因而我把上面的脚本改为:
```
#!/bin/sh
. /etc/profile
java -jar /home/zhang/offergateway.biz.offer-1.0-SNAPSHOT.jar
```

crontab也改为绝对路径:

```
* * * * *  sh /home/zhang/task.sh
```

哈哈,成功了~~happy~~
相关文章
相关标签/搜索