日期:2014-05-16  浏览次数:20568 次

如何在Linux实现计划任务

在Windows系统下,可以通过设置计划任务,让该任务按照设定的时间启动运行,解决了人工干预的烦恼,在Linux下也有类似的功能,它就是crontab

?

crontab是什么

crontab可以让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。它是linux系统下一个自动执行指定任务的系统程序。例如,你想在每晚零时开始让爬虫抓取网页,就可以用cron来自动执行。

?

部分参数说明
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。

注意:

-u user用来指定该user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

?

crontab文件的格式:M H D m d COMMAND.
M: 分钟(0-59)
H:小时(0-23)
D:天(1-31)
m: 月(1-12)
d: 一星期内的天(0~6,0为星期天)


COMAND为你要运行的程序,这个程序被送入shell执行

?

一些实例

0?23* * * /home/peter/crawl.sh

每晚的23:00 开始运行/home/peter/crawl.sh (*表示该项为所有时段)


45 4 1,10,20 * * /home/peter/crawl.sh

每月1号、10号和20号的4:45 执行 /home/peter/crawl.sh

?

10 1 * * 6,0 /home/peter/craws.sh

每周六、周日的1:10运行 /home/peter/crawl.sh

?

0,30 18-23 * * * /home/peter/crawl.sh

每天18:00-23:00之间每隔30分钟运行/home/peter/crawl.sh

?

以指定用户的身份来运行程序

如果你想以用户peter的身份每小时的第15分钟运行某个程序,可以使用

15 * * * * peter /home/peter/crawl.sh?

其中的星号(*)是通配符,表示cron将忽略这个字段

如果你想每两小时就运行某个程序,可以在小时字段里使用 */2。它将会在2点,4点,6点……22点,24点运行。


cron语句中还可以使用逗号(,)来指定多个时间。例如你想在每小时的15分和30分运行某个程序,可以在分钟字段使用 15,30:

15,30 * * * * peter /home/peter/crawl.sh

?

?

实现定时task的两种方式
一种是编辑一个文件,用crontab 载入
一种是用crontab -e 直接编辑生效

?

crontab错误的几种原因

如果你的crontab没有按照你的意愿执行,那么就需要检查如下几点

COMMAND的路径是否有问题
Shell脚本是否有问题
该用户是否有执行权限