Linux下计划任务 crontab

许多情况下,大家常常希望让Linux系统可以在指定的时间帮忙处理一些计划任务。
例如绝大多数Android RD都希望在晚上十二点之后,网路较好且OA空闲的情况下去Sync Or Build Android Code,避免资源浪费。亦或希望服务器每周自动备份一次数据库等规律性工作。这些计划任务如果依靠人工完成,必然存在容易遗忘和需要加班守候等巨大弊端。
Linux下的Crontab应用程序横空出世,个人觉得可以媲美windows的计划任务,并且功能上有过之而无不及。

由于笔者适用的Ubuntu系统,所以默认情况下,Crontab为系统自带了。这么常用的工具,个人认为应该所有类型的Linux系统都应该已经自带了该工具。

先来看看适用方法:

bevis@bevisPc:~/temp$ crontab  –help

crontab\uff1a\u65e0\u6548\u9009\u9879 — –

crontab: usage error: unrecognized option

usage: crontab [-u user] file

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

(default operation is replace, per 1003.2)

-e (edit user’s crontab)

-l (list user’s crontab)

-r (delete user’s crontab)

-i (prompt before deleting user’s crontab)

下面我们将开始crontab的奇妙旅程–

Crontab命令的一些参数与说明:

crontab -u    //设定某个user的cron服务,个人电脑上适用很少。

crontab -l     //列出当前console所属用户的计划任务实际内容。

crontab -r    //删除用户的crontab任务,一般会使用-e参数替换。

crontab -e   //编辑用户的crontab任务

比如说bevis用户想查看自己的crontab的设置:crontab -u bevis -l (当然,不加-u就是查看当前用户的计划任务啦~)
再例如,root用户想删除bevis的crontab设置:crontab -u bevis -r
编辑crontab计划服务时,可以输入:crontab  -e命令即可自动
进入nano编辑器的编辑模式,编辑的内容有一定的格式要求: 例如我自己的计划任务为 05 00 * * * /home/bevis/jobs/job_for_qcom_bsp_dev.rc >/home/bevis/jobs/run_jobs.log 2>&1
该行语句加入到编辑框的最后面即可,如果后面想暂时取消该任务,可以使用shell一样的注释符号“#”加到欲注释的任务前面。(顺便补充一下,crontab可以同时支持好几个计划任务,所以你可以编辑一些任务进来)
 下面我们看看任务的语法格式:
它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,具体格式如下:
minute   hour   day   month   week   command


笔者画出了对应的框图,以便于大家理解如上图所示,cron文件语法很简单且高效,相信对照上图,读者很容易可以看懂前面笔者电脑中所举例计划任务的大致含义,当然有些特殊字符的意义需要先介绍给大家。

特殊符号的含义:

“*”代表取值范围内的所有数字,

“/”代表”每”,

“-“代表从某个数字到某个数字,

“,”分开几个离散的数字

说再多不如举几个例子来得实在。
例子来了:


30      *        *          *      *     ping 0.0.0.0            指定每小时的第30分钟执行一次ping 命令
30     5        *           *      *     ping 0.0.0.0            指定每天的 5:30 执行ping 命令
30     5       6          *      *      ping 0.0.0.0             指定每月6号的5:30分执行ping 命令
30     5       6          7      *      ping 0.0.0.0             指定每年的7月6日5:30执行ping 命令
30     5       *          *      0      ping 0.0.0.0              指定每星期日的5:30执行ls命令(注:0表示星期天,1表示星期1,以此类推)
其他通配符举例:
30     5            10,20       *         *     ping 0.0.0.0  指定每月10号及20号的5:30执行ping 命令
30     5-10        *             *         *     ping 0.0.0.0  指定每天5-10点的第25分钟执行ping 命令[注:“-”用来连接连续的时段]
*/15   *             *             *          *     ping 0.0.0.0  指定每15分钟执行一次ping 命令 ( 即每个小时的第0 15 30 45 60分钟执行ping 命令 )
30    5            */10         *          *     ping 0.0.0.0  指定每个月中,每隔10天5:30执行一次ping 命令( 即每月的1、11、21、31日是的5:30执行一次ping 命令。)
任务调度执行log保存:
可使用重定向的方法,将crontab的执行过程全部存到某支文件中,例如我自己的例子: 05 00 * * * /home/bevis/jobs/job_for_qcom_bsp_dev.rc >/home/bevis/jobs/run_jobs.log 2>&1
每天的凌晨12:05分,执行脚本job_for_qcom_bsp_dev.rc中的内容,并且将执行中的log放到/home/bevis/jobs/run_jobs.log文件中。 注:2>&1 表示正常执行结果及标准错误输出的信息。

正常情况下,这篇文章到此应该就结束了。考虑到crontab有一个容易导致新手十分十分十分容易犯错的特性,所以给大家加餐!!

解决crontab无法读取环境变量的问题(crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错.

自己为了build code,加入的环境变量及自己的crontab计划任务流程完整的贴给大家参考:
#!/bin/sh
. /etc/profile
. /home/bevis/.profile
export JAVA_HOME=/home/bevis/bin/jdk1.6.0_26
export JRE_HOME=/home/bevis/bin/jdk1.6.0_26/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=/home/bevis/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export ANDROID_JAVA_HOME=$JAVA_HOME
cd /home/bevis/android_project
rm -rf ./out_images 
rm -rf ./pub
repo sync -c -d 
/home/bevis/android_project/build_image Phone build_eng CPUCORES=4
利用“crontab -e”编辑计划任务
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
30 1 * * * /home/bevis/jobs/jobs.rc >/home/bevis/jobs/run_jobs.log 2>&1
1
保存完成。
到此想必读者对crontab的强大可定制型有了一定了了解,有什么感想我们再谈论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值