crond是linux中的一个定时任务常驻程序,它会在每分钟检查一次作业列表,从而达到在指定时间自动运行指定的作业,这个程序对于系统运维来讲必不可少。

通常我们使用crontab程序来设定和管理作业的,具体启动执行则是crond deamon。下面讲述如何使用crontab来设定使得系统在您指定的时间运行特定的任务。

步骤说明:

1. 编写你想要执行的作业的shell 脚本。

2. 使用chmod 修改shell脚本的mod为可执行。

3. 将脚本添加到crontab配置文件中,并指定其启动运行的时间。

1. 编写 shell 脚本

编写shell脚本的方法不是本文的主要内容,请参阅:shell脚本编写方法 ;shell 常用的条件判断与条件测试shell 中数据传递方法

现假定你已经正确地编写了一个shell script, 名叫 myShellScript.sh 在您的个人目录下。

2. 使用chmod修改shell脚本mod为可执行

使用如下指令来修改mod :

chmod +x myShellScript.sh 

特殊情况下,如果你的shell脚本中使用了运行中需要root相关权限的命令,则需要修改对应的文件mod,使得其运行期自动提升为root权限。

chmod +s xxxxx ;

3. 将脚本添加到crontab配置文件中,并指定其启动运行的时间。

crontab命令的惯常用法是:

crontab -l #用于查看当前用户的定时作业。

crontab -e #会打开编辑器,加载作业设置文件,用于编辑、添加、删除定时作业。

通常我们会先用crontab -l 来查看当前的配置,然后使用crontab -e 来启动编辑器, 将我们所需的任务添加进去。

配置crontab定时作业就必定包含两类信息:一个时间设定,一个目标程序。

其文件的格式为:

# 格式说明
# ——分钟 (0 - 59)
# | ——小时 (0 - 23)
# | | ——日 (1 - 31)
# | | | ——月 (1 - 12)
# | | | | ——星期 (0 - 7)(星期日=0或7)
# | | | | |
# * * * * * 被执行的命令

上述可以看出,五个* ,一个jobName, 分别用于定义时间频度 和 作业名称。

时间指定详细设计
crontab配置文件支持在【分时日月周】任何一个时间项里填写多个数值:

1. 逗号 (',') 分开的值,例如:“1,3,4,7,8”
2. 连词符 ('-') 制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
3. 星号 ('*') 代表任何可能的值。例如,在“小时域” 里的星号等于是“每一个小时”,等等
4. 某些cron程序的扩展版本也支持斜线 ('/') 操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;

例如:

*/5   1,2,3-9/3    1    1   *   touch `date "+%Y%m%d"`

以上设置表明:用户想要在每年的1月1日1点,2点 ,还有3到9中能被3整除的点,每隔5分钟运行一次。

注意要点:

第三项 与  第五项 都定义的情况下, 两者是或的关系, 如:

  -   /root/shift_my_times.sh

这个程序会在4月1日至7日以及4月余下的每一个星期日执行。

最后说明一下:

高级用法:

cron有八个特殊符号,使用特殊符号不但节省时间,也更直观一些,以下是符号说明:

特殊符号           意义
@reboot          重启时运行一次
@yearly          每年运行一次,相当于: "0 0 1 1 *".
@annually       跟@yearly意思一样
@monthly       每月运行一次, 相当于: "0 0 1 * *".
@weekly         每周运行一次,相当于 "0 0 * * 0".
@daily            每天运行一次, 相当于"0 0 * * *".
@midnight      跟@daily的意思一样)
@hourly          每小时运行一次, 相当于"0 * * * *".

Demo示例:每隔一小时运行一下/root/mkdir.sh:

@hourly /root/mkdir.sh

/etc/crontab和/etc/cron.d/*配置文件

/etc/crontab为系统crontab配置文件,通常只能被root用户和守护进程用来设置系统类的cron任务, 所有linux用户必须使用crontab来创建,编辑cron任务。/var/spool/cron和/var/cron/tabs为普通用户crontab配置文件。

默认cron配置文件/etc/crontab

普通/etc/crontab文件样本:

SHELL=/bin/bash P
ATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
* * * * root run-parts /etc/cron.hourly
* * * root run-parts /etc/cron.daily
* * root run-parts /etc/cron.weekly
* * root run-parts /etc/cron.monthly

由此可以看出, crontab已经预定义好了特定周期的脚本存放路径,如果符合每时、每日、每周或每月运行,可以不用配置,只需将脚本直接放入指定的文件夹下,然后 chmod +x filename,即可。 以下为目录说明:

目录                  描述
/etc/cron.d/ 所有该目录下的脚本通过设置crontab来调用
/etc/cron.daily/ 每天运行一次该目录下的所有脚本
/etc/cron.hourly/ 每小时运行一次该目录下的所有脚本
/etc/cron.monthly/ 每个月运行一次该目录下的所有脚本
/etc/cron.weekly/ 每周运行一次该目录下的所有脚本

使用示例:

1. 编写脚本:采集linux系统性能指标的脚本

#!/bin/bash
cd /home/pppset/performanceLog/ #create dir for today
today=`date "+%Y%m%d"` if [ ! -d $today ]; then
mkdir $today;
fi cd $today #declare var to remember current hour.
hour=`date "+%H"` echo "current hour is: "$hour postfix="_nohup.log" filenameOfDstat=$hour"_"$today"_dstat"$postfix".csv"
echo $filenameOfDstat filenameOfIostat=$hour"_"$today"_iostat"$postfix
echo $filenameOfIostat filenameOfPidstat=$hour"_"$today"_pidstat"$postfix
echo $filenameOfPidstat filenameOfFree=$hour"_"$today"_free"$postfix
echo $filenameOfFree filenameOfMemInfo=$hour"_"$today"_meminfo"$postfix
echo $filenameOfMemInfo filenameOfUptime=$hour"_"$today"_Uptime"$postfix
echo $filenameOfUptime filenameOfMpstat=$hour"_"$today"_mpstat"$postfix
echo $filenameOfMpstat filenameOfIOtop=$hour"_"$today"_iotop"$postfix
echo $filenameOfIOtop filenameOfSar=$hour"_"$today"_sar"$postfix
echo $filenameOfSar #the process id which we are intrested in.: mysqld ruby.bin
pidMysqld=`ps -e| grep mysqld.bin|awk 'NR==1 {print $1}'`
pidRuby=`ps -e| grep ruby.bin|awk 'NR==1 {print $1}'` export DSTAT_MYSQL_USER='root'
export DSTAT_MYSQL_PWD='xxxx' nohup dstat -t --mysql5-cmds --mysql5-io --mysql5-keys $@ -df --disk-util --disk --mem --proc --top-cpu --top-latency --top-bio --io --sys --filesystem --tcp --vm --output $filenameOfDstat &
nohup pidstat -p $pidMysqld -u -d -w -h > $filenameOfPidstat &
nohup mpstat -P ALL > $filenameOfMpstat &
nohup iotop -p $pidMysqld -n -d > $filenameOfIOtop &
nohup iostat -dxk > $filenameOfIostat &
#nohup sar -o $filenameOfSar & #nohup free > $filenameOfFree &
#nohup cat /proc/meminfo > $filenameOfMemInfo &
#nohup uptime > $filenameOfUptime & # in every day at april ,run the shell script at min past each hour.
# * * * /root/shift_my_times.sh # * * * /home/pppset/performanceLog/collectLog.sh

其中关于dstat采集监控mysql io 性能的使用说明请参见这里

2. 加入定时任务:使用crontab -e 命令编辑定时任务,将以下放入到末尾。

 ,,- *  * /home/pset/performanceLog/collectLogs.sh

参考链接:

1. http://zh.wikipedia.org/wiki/Cron

2. http://www.zhetenger.com/cron%E9%AB%98%E7%BA%A7%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B

3.

crontab使用方法和示例的更多相关文章

  1. js中的数组Array定义与sort方法使用示例

    Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList  定义方法:  1:使用new Array(5  )创建数组 var ary = new Array(5): ...

  2. php一些单选、复选框的默认选择方法(示例)

    转载 http://www.php.cn/php-weizijiaocheng-360029.html 一. radio和checkbox及php select默认选择的实现代码 1.radio单选框 ...

  3. linux 中的定时任务crontab使用方法

    linux 中的定时任务crontab使用方法: 切换到root用户,sudo su root (可以设置成不需要输入密码) sudo su - (需要输入当前帐号的密码才能进入.) crontab ...

  4. ref:关于JAVA中一些安全漏洞示例说明及如何规避方法代码示例总结分享

    ref:http://www.xwood.net/_site_domain_/_root/5870/5874/t_c268166.html 标签:安全,漏洞,健壮,java,SQL注入,SS及CSRF ...

  5. axios get及post方法代码示例&&方法封装

    axios get及post方法代码示例 get方法: show: function(){ //get方式 //赋值给变量self var self = this; var url = "h ...

  6. MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新

    MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...

  7. [deviceone开发]-动态添加组件add方法的示例

    一.简介 这个示例详细介绍ALayout的add方法的使用(原理也适用于Linearlayout),以及add上去的新ui和已有的ui如何数据交换,初学者推荐.二.效果图 三.相关下载 https:/ ...

  8. 表单input中录入资料的检查方法及示例

    本文内容 表单录入信息的检查原则 常见检查的三种方法 示例     输入框有字符长度的限制     输入框有输入字符个数范围的限制 知识补给--检查方式的介绍     输入框只可(或不可)输入数 ...

  9. ubuntu下crontab编辑方法的设定

    在ubuntu下,首次编辑crontab计划任务的时候,会提示让选择编辑器.由于对nano编辑器不是很熟悉,若是选择nova编辑的话,会有些麻烦.可以重置编辑器,方法如下:[root@wang ~]# ...

随机推荐

  1. Extjs的GridPanel的RowExpander的扩展

    对Extjs的grid使用,有时候单单使用其中的某些组.或某些行是远远不够的,还需要对行进行一些扩展,如:与filters相似的row扩展控件,如下 这个控件,我也是从网上找的小例子,按照其内部的某些 ...

  2. 20145301&20145321&20145335实验一

    这次实验我的组员为:20145301赵嘉鑫.20145321曾子誉.20145335郝昊 实验内容详见:实验一报告

  3. Android简单图片浏览器

    效果如下:            代码编写如下: Crize_demo\app\src\main\res\layout\activity_main.xml <!--定义一个线性布局--> ...

  4. 解决Maven中OutOfMemory错误

    当Maven项目很大,或者你运行诸如 mvn site 这样的命令的时候,maven运行需要很大的内存,在默认配置下,就可能遇到java的堆溢出.如:   [INFO] Building jar: / ...

  5. [转]Java中的回车换行符/n /r /t

    '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来.下面转一篇文章. 回车和换行 今天,我总算搞清楚"回车"(carriage r ...

  6. elixir 高可用系列(一) Agent

    概述 elixir 本身是一种 immutable 的语言,默认情况下,进程间是不共享任何状态的,进程之间通过消息来交互. 而 Agent 则封装了一种进程间共享状态的方式,通过这种方式,不用显式的写 ...

  7. Linux系列笔记 - vim相关记录

    一.常用到的vim命令 这里只简单记录常用到的命令,后面会有自己记录的命令,但有些可能不常用. 常规模式: gg 跳到文件头 shift+g 跳到文件尾 行数+gg 跳到指定行 如:123gg 跳到1 ...

  8. PHP与Java进行通信

    缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些 ...

  9. 【Linux高级驱动】LCD驱动框架分析

    1.framebuffer接口层(fbmem.c) 功能:给用户提供接口 fbmem_init  ),"fb",&fb_fops)  /*2.创建一个设备类*/ fb_cl ...

  10. atitit.团队建设总结o6o fix

    atitit.团队建设o6o fix #----- 无限放大梦想 2 要有自己的方向...主动添加自己的东东.. 3 有几个tech site,能晓得最新的的知识.. 3 有问题多交流, 3 失败的造 ...