如何在Linux实现计划任务
在Windows系统下,可以通过设置计划任务,让该任务按照设定的时间启动运行,解决了人工干预的烦恼,在Linux下也有类似的功能,它就是crontab
crontab是什么
crontab可以让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。它是linux系统下一个自动执行指定任务的系统程序。例如,你想在每晚零时开始让爬虫抓取网页,就可以用cron来自动执行。
部分参数说明
crontabfile[-uuser]-用指定的文件替代目前的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脚本是否有问题
该用户是否有执行权限