`

我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)

阅读更多

我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)


本文链接:http://codingstandards.iteye.com/blog/1140475   (转载请注明出处)

 

用途说明

crontab命令用于设置例行任务,类似于Windows中的任务计划。我们常用它来设置如下定时执行的任务:

  • 进行时间同步:ntpdate
  • 进行数据统计:mysql, sqlplus
  • 检查磁盘空间:df
  • 监控CPU使用:vmstat
  • 检查某些程序是否还在运行,重新启动:ps, service xxx start
  • 杀掉某些运行时间过长的进程:kill
  • 定时发送邮件:mail
  • 清理日志:find & rm
  • 清除数据库中的历史记录:delete from xxx where date <= n days before
  • 备份数据库:mysqldump
  • 自动系统更新:yum
  • ...

 

常用参数

格式:crontab -l

参数小写L,用于显示crontab中设置的任务情况。

 

格式:crontab -e

使用文本编辑器(通常是vi)编辑任务列表。

 

任务格式要点如下:

以#号开头的行是注释:但是与shell脚本不同的是,注释只能单独写在一行,不能与任务或环境变量设置写在同一行。

空行将被忽略;

环境变量设置:name = value,与shell脚本不同的是:等号前后可以加空格。

任务由六部分组成:小时 分钟 日期 月份 星期 程序及参数

前面五个部分用来设置任务执行的频次:

可以设置为*,比如分钟设置为*是表示每分钟;

也可以设置为具体的数值,比如小时设置为9表示9点的时候;

还可以设置多个数值,以逗号分隔,比如日期设置为5,15,25表示匹配这三个日期之一;

但是有一点要切记:前面四项的关系之间为and的关系,即需要同时满足;但星期那一项与前面月份日期是or的关系(被人称之为“冲突的逻辑”)。

 

任务的六个组成部分:

1)分(0-59)
2)时(0-23)
3)日(1-31)
4)月(1-23,或者英文名)
5)周(0-7,或者英文名,0和7均表示周日)
6)要执行的内容:包括程序名称和参数,但要注意%的使用,后面有讲到。

 

关于前五段:时间和日期
1)表示任意:* 号表示 “任意”(first-last)。
2)指定数字,表示指定的时间。
3)指定段,表示“开始-结束”内包含的数:比如3-6,表示3,4,5,6
4)指定列表:比如 “1,2,3,4″,”0-4,8-12″
5)指定“步长”:8-14/2 表示8,10,12,14

 

关于百分号%

%意味着命令行的结束。%后面的内容将被当做命令的标准输入,同时%又相当于换行。

man 5 crontab 写道
The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the
line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL vari-
able of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed
into newline characters, and all data after the first % will be sent to the command as standard input.

 

“%”在crontab文件中,有“结束命令行”、“换行”、“重定向”的作用,比如:
0 22 * * 1-5 mail -s “It’s 10:00 pm” joe%Joe,%%Where are your kids?%
将会在周一至周五的22:00发送一分内容为:
Joe,<换行>

<换行>

Where are your kids?<换行>

如果在命令行中确实需要%,比如date命令中指定日期时间的输出格式,那么就需要加上\进行转义。

0 4 * * *  /opt/cron/mysql_dump.sh ? ?> /srv/logs/`date +\%y-\%m-\%d`.dump.log

 

关于crontab的帮助:

man crontab      命令行的帮助

man 5 crontab   任务定义格式

 

crontab手册页中的示例 (EXAMPLE CRON FILE)

man 5 crontab 写道
# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to ‘paul’, no matter whose crontab this is
MAILTO=paul
#
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It’s 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"
 

 

符号@开头的特殊时间 ,比如 @reboot表示启动之后执行一次。

man 5 crontab 写道
These special time specification "nicknames" are supported, which replace the 5 initial time and date fields,
and are prefixed by the ’@’ character:
@reboot : Run once, at startup.
@yearly : Run once a year, ie. "0 0 1 1 *".
@annually : Run once a year, ie. "0 0 1 1 *".
@monthly : Run once a month, ie. "0 0 1 * *".
@weekly : Run once a week, ie. "0 0 * * 0".
@daily : Run once a day, ie. "0 0 * * *".
@hourly : Run once an hour, ie. "0 * * * *".

 

用于crontab的shell脚本编写注意事项:

1)执行位置:最好在前面加上 cd $(dirname $0) || exit 1   表示更改当前工作目录到脚本所在目录

2)环境变量:最好在前面加上 . /etc/profile    表示将/etc/profile设置的环境变量引入

脚本样本如下所示:

#!/bin/sh

cd $(dirname $0) || exit 1

. /etc/profile

# 剩下的代码

 

要使crontab设置的任务有效的执行,必须确保crond服务在运行。

[root@smsgw mhr_server]# service crond
Usage: /etc/init.d/crond {start|stop|status|reload|restart|condrestart}
[root@smsgw mhr_server]# service crond status
crond (pid 28553 28543 28337 28328 27900 14497 1865) is running...
[root@smsgw mhr_server]#

如果不在运行,可以执行下面的命令启动:

service crond start

如果要确保系统重启之后该服务自动执行,可以执行如下命令:

chkconfig crond on

 

使用示例

示例一 显示crontab设置的任务

[root@web ~]# crontab -l

# 2010.06.30 Tomcat监控
* * * * * mj.sh /opt/apache/apache-tomcat-6.0.26/bin tomcat './startup.sh'

# 2010.07.21 邮件代理服务器
* * * * * mj.sh /opt/omc08/src/ems_proxy ems_proxy 'make start'

[root@web ~]#

 

示例二 日期和星期同时设置

错误示例:每月6到12号中的星期天的4点正,执行备份脚本。做了如下crontab项。
0 4 6-12 * 0 /root/work190/mhr_server/backup_workplace_sent.sh
在crontab里面如果日期与星期同时设置,是“或”的关系,也就是说上面的设置的含义是每月的6到12号或者星期天,这些日子的4点执行备份脚本。

怎么样才能实现这个需求呢?没办法,只能在脚本中进行判断。

 

示例三 定时关机

为了节约用电,在每天下班之后最好关闭开发服务器,如果忘记了的话,就可以叫crontab帮忙啦。

30 18 * * * poweroff

 

问题思考

相关资料

【1】Michael的专栏  Linux下crontab命令的用法
http://blog.csdn.net/sipsir/article/details/3973713
【2】新浪科技时代  Linux系统利用Crontab命令实现定时重启
http://tech.sina.com.cn/s/2008-03-13/08232074826.shtml
【3】爱工作,爱生活  Linux定时执行程序--Crontab
http://gavin-chen.iteye.com/blog/257846
【4】THE GEEK STUFF  Linux Crontab: 15 Awesome Cron Job Examples
http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

 

 

 

返回 我使用过的Linux命令系列总目录

 

1
1
分享到:
评论

相关推荐

    Linux基础及系统管理

    Linux基本使用命令 **3.1 启动和关机** - **3.1.1 启动** - 开机时按下电源按钮即可启动Linux系统。 - **3.1.2 指令格式** - 大多数命令遵循类似的格式:`command [options] [arguments]`。 - **3.1.3 关机** ...

    Linux系统指南

    - **什么是软链接**:类似于Windows中的快捷方式。 #### 五、字符处理 **5.1 管道** - 将一个命令的输出作为下一个命令的输入。 **5.2 使用grep搜索文本** - 在文件中搜索特定模式的文本。 **5.3 使用sort排序**...

    linux学习笔记分享

    + /var/log/cron:记录 crontab 这个例行性服务的内容 + /var/log/httpd, /var/log/news, /var/log/:记录相关服务的日志文件 通过了解 Linux 目录架构和文件系统,可以更好地管理和维护 Linux 系统,提高工作...

    LabVIEW控件设计与实现:媲美QT控件的高级UI开发技巧

    内容概要:本文详细介绍了LabVIEW控件的设计与实现,尤其是一些由经验丰富的老工程师精心打造的控件。LabVIEW是一款图形化编程语言,广泛应用于数据采集、仪器控制和工业自动化领域。文中通过具体实例展示了如何利用LabVIEW创建美观且功能强大的控件,如滑动条、波形图、金属质感旋钮、动态波形图表以及智能选项卡等。作者强调了LabVIEW控件在灵活性和美观度方面的优势,并分享了许多实用的技术细节和优化方法。 适合人群:具有一定编程基础并希望深入了解LabVIEW控件设计的开发者和技术爱好者。 使用场景及目标:适用于需要进行高效的数据展示和交互设计的应用场景,如工业控制系统、实验室设备操作界面等。目标是帮助用户掌握LabVIEW控件的高级特性,提高开发效率和用户体验。 其他说明:文章不仅提供了具体的代码示例,还探讨了控件美学背后的设计理念和技术实现,鼓励读者探索更多可能性。

    Delphi 12.3控件之unidac-10.4.0-d27pro.exe

    Delphi 12.3控件之unidac_10.4.0_d27pro.exe

    11.盛趣自闭面(还是自己太菜).txt

    11.盛趣自闭面(还是自己太菜).txt

    58面经面试过程和题目.txt

    58面经面试过程和题目.txt

    电大操作系统课后习题解答

    电大操作系统课后习题解答

    人工智能技术与应用演讲【61页PPT】.pptx

    人工智能技术与应用演讲【61页PPT】

    chromedriver-mac-arm64-135.0.7049.41.zip

    chromedriver-mac-arm64-135.0.7049.41.zip

    通信工程中QPSK调制及其在瑞利与高斯信道下的误码率对比研究

    内容概要:本文详细介绍了QPSK(四相移键控)调制方法及其在瑞利信道和高斯白噪声信道下的误码率(BER)性能分析。首先展示了QPSK星座图的绘制方法,接着构建了一个简化的QPSK发射机模型,用于将二进制比特流映射到相应的星座点。随后,分别实现了两种信道模型:高斯白噪声信道(AWGN)和瑞利信道,并解释了它们的工作原理以及如何向传输信号添加噪声。文中还提供了详细的误码率测试脚本,通过大量随机比特进行仿真,最终得到了不同信噪比条件下的误码率曲线。此外,作者还讨论了QPSK与其他调制方式如BPSK、16QAM之间的性能差异,强调了频谱效率与抗噪能力之间的权衡关系。 适合人群:对无线通信系统感兴趣的科研人员、研究生以及从事通信工程领域的工程师。 使用场景及目标:①帮助读者理解QPSK的基本原理及其在不同信道环境中的行为特性;②提供实用的Python代码片段,便于快速搭建仿真环境并验证理论结果;③探讨各种调制方式的选择依据,指导实际应用中的优化决策。 其他说明:文中多次提到‘骚操作’,意指一些巧妙但非传统的编程技巧,有助于提高代码执行效率或简化复杂度。同时提醒读者注意仿真过程中可能出现的问题,如

    新建 Microsoft Word 文档 (9).docx

    新建 Microsoft Word 文档 (9).docx

    计算机科学与技术- 软件开发工具 培训资料

    计算机科学与技术- 软件开发工具 培训资料

    每个元素中的设置位数 时间和内存效率高-Count the number of set bits in each element. Time and memory efficient

    bitcount统计每个元素中设置的位数 B = bitcount(A) Counts the number '1' bits in each element B = bitcount(A, bitValue) "bitValue" = 1 = default = counts the occurance of '1' if bitValue = 0; counts the number '0' The total bits to verify is [8,16,32,or 64] based on the maximal value of A B = bitcount(A, bitValue, maxBits) the total # of bits to examine

    MOM生产运营管理平台解决方案【35页PPT】.pptx

    MOM生产运营管理平台解决方案【35页PPT】

    deli-数码录音电话机-HCD6238(28)P-TSD-使用说明书

    deli-数码录音电话机-HCD6238(28)P-TSD-使用说明书

    ssm基于web的邮票鉴赏系统 LW PPT.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

    Delphi 12.3控件之Tsilang 7.5.0.0 D12.7z

    Delphi 12.3控件之Tsilang 7.5.0.0 D12.7z

    ios+UIButton分类+UIButton+UIButton图片文字位置

    ios+UIButton分类+UIButton+UIButton图片文字位置

    基于MATLAB设计的标志是识别系统(高分项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载

Global site tag (gtag.js) - Google Analytics