crontab用法详解实例.docx
- 文档编号:7907063
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:32
- 大小:37.11KB
crontab用法详解实例.docx
《crontab用法详解实例.docx》由会员分享,可在线阅读,更多相关《crontab用法详解实例.docx(32页珍藏版)》请在冰点文库上搜索。
crontab用法详解实例
Linuxcrontab日志讲解
crontab是Linux下最常用的计划任务服务。
本文跟大家分享一下有关linuxcrontab日志存放的一些心得,希望本文能教会你更多东西。
默认情况下,crontab中执行的日志写在/var/log下,如:
#ls/var/log/cron*
/var/log/cron/var/log/cron.1/var/log/cron.2/var/log/cron.3/var/log/cron.4
如果日志有问题,可以参考以下做法:
为crontab增加日志
crontab的日志比较简单,当crond执行任务失败时会给用户发一封邮件。
恰巧在我们的一台服务器上发现一个任务没有正常执行,而且crond发邮件也失败了。
通过看mail的日志,看到是磁盘空间不足造成的。
此外,同事帮我为crontab中的任务增加自己的日志,这样出错后,比较容易看到原因。
06***$HOME/for_crontab/createTomorrowTables>>$HOME/for_crontab/mylog.log2>&1
把错误输出和标准输出都输出到mylog.log中。
注意:
不要写成
06***$HOME/for_crontab/createTomorrowTables2>&1>>$HOME/for_crontab/mylog.log
否则就输出到标准输出了
Linux的自动执行程序cron和crontab
假如你有一些任务要定期执行,比如清理磁盘、删除过期文件、发送邮件和提醒,这个时候可以用cron来帮你。
首先是安装,大多数发行版都预装了,Gentoo下的cron有许多种实现,可以用emerge--searchcron来查看,这里用vixie-cron,因为功能比较完整,命令语法也比较通用。
#emergevixie-cron
之后要启动cron服务:
#/etc/init.d/vixie-cronstart
别忘了把cron加入到启动脚本中:
#rc-updateaddvixie-crondefault
完成安装。
系统cron设定:
/etc/crontab
通过/etc/crontab文件,可以设定系统定期执行的任务,当然,要想编辑这个文件,得有root权限。
让我们打开/etc/crontab,看看cron的语法:
1.#forvixiecron
2.#
3.#$Header:
/var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v1.12005/03/0423:
59:
48ciaranmExp$
4.#
5.#
6.
7.#Globalvariables
8.SHELL=/bin/bash
9.PATH=/sbin:
/bin:
/usr/sbin:
/usr/bin
10.MAILTO=root
11.HOME=/
12.
13.#checkscriptsincron.hourly,cron.daily,cron.weeklyandcron.monthly
14.0****rootrm-f/var/spool/cron/lastrun/cron.hourly
15.13***rootrm-f/var/spool/cron/lastrun/cron.daily
16.154**6rootrm-f/var/spool/cron/lastrun/cron.weekly
17.3051**rootrm-f/var/spool/cron/lastrun/cron.monthly
18.*/10****roottest-x/usr/sbin/run-crons&&/usr/sbin/run-crons
以上是一个默认的/etc/crontab文件,7~11行设定了执行任务时特定环境变量的值,MAILTO=root指出出错信息发给root。
真正描述执行的任务在14~18行,每行代表了一个定期执行的任务,从前到后,分为3部分:
第一部分,一堆奇怪的数字和星号,这部分描述任务的执行周期和时间,后面我们将详细解释。
第二部分,上面的文件全部是"root",描述了执行任务时的用户。
第三部分,为需要执行的完整命令。
第一部分分为5个小部分,没部分可以是数字或者星号,分别代表了分钟、小时、日期、月份、周,让我们来看一个例子:
07***rootmpg123~/wakeup.mp3
分时日月周
星号,即代表不限制,上面的例子就是:
每天的7点0分,都将执行mpg123~/wakeup.mp3,放首歌,把自己从睡梦中叫醒~
以下是各部分的取之范围:
分钟
0~59
小时
0~23
日期
1~31
月份
1~12
周
0~6
其中周的范围0~6,0代表星期天,1~6代表周一~周六。
让我们来看更多的例子:
04**0rootemerge--sync&&emerge-uDworld#每周日凌晨4点,更新系统
021**rootrm-f/tmp/*#每月1号凌晨2点,清理/tmp下的文件
0865*rootmailrobin
假如,我想每隔2分钟就要执行某个命令,或者我想在每天的6点、12点、18点执行命令,诸如此类的周期,可以通过“/”和“,”来设置:
*/2****root...............#每两分钟就执行........
06,12,18***root...............#每天6点、12点、18点执行........
用户的cron:
crontab命令
上面我们提到的/etc/crontab文件,只能指定系统定期执行的命令,如果用户想设定自己定期需要执行的命令的话,就要用到crontab命令,编辑自己的crontab文件。
首先,用户必须隶属于cron组才可以用crontab命令,可以用下面的命令把用户加入到cron组中:
#gpasswd-agalekicron
crontab命令主要有3个参数:
-e:
编辑用户的crontab。
-l:
列出用户的crontab的内容。
-r:
删除用户的crontab的内容。
执行crontab-e,将自动打开编辑器,你可以编辑自己的crontab文件,语法和/etc/crontab文件一样,不同的只是,不必再指出执行的用户,编辑后保存即可。
crontab-l用来查看自己的crontab文件内能,crontab-r删除自己的crontab。
Crontab使用心得
服务器系统:
64BitCentOS5.5
虽然关于Crontab的介绍到处都是,详细读了一遍这个词条,收获还是有的。
Crontab这个名字来自“chronos”,一个古希腊语,“时间”的意思(以下用法在生产环境下的服务器非常有用,抚琴煮酒强烈推荐);关于crontab的基础用法和语法我就不推荐了,google和51cto上到处都是,我说的是一些进阶技巧,里面也有可能是不知道的;Shell脚本均取自于线上服务器。
我安装的服务器一般都是采用最小化安装,安装以后就发现启动cron的管理服务crond默认就是启动的,
servicecrondstatus
crond(pid3444)isrunning...
手快的小伙可用chkconfigcrondon让其在level3和level5自动运行。
cron把命令行保存在crontab(crontable)文件里,这个文件通常在/etc目录下。
每个系统用户都可以有自己的crontab(在/var/spool/cron/下)。
要查看当前用户的crontab,输入
crontab-l
要编辑crontab,输入
crontab-e
要删除crontab,输入
crontab-r
如当前是root身份,要查看/编辑/删除/某用户的crontab,只需在相应的命令后加上-uUSERNAME(如crontab-e-uUSERNAME)即可。
crontab文件的默认编辑器是vi,可以输入
exportVISUAL='editor'
更改默认编辑器。
cron服务每分钟不仅要读一次/var/spool/cron目录内的所有文件,还需要读一次/etc/crontab文件。
配置这个文件也能让cron执行任务。
使用crontab命令是对用户级任务的配置,而编辑/etc/crontab文件是对系统级任务的配置。
抚琴煮酒定义的crontab语法比较好记,推荐记忆学习
分时日月星期用户带绝对路径的命令脚本或PHP详细路径
细心的你发现没有,crontab最小执行时间为分钟,如果要求任务是以秒为级别的怎么办,其实是有办法的,我等会以实例说明下;服务器我建议也以/etc/crontab为主,它更方便控制用户管理;建议服务器上的计划任务时间错开,不要同时并行任务,不然会在某时间段造成系统负载过大,搞得你的Nagios狂发报警邮件。
玩windows应该也会发现,windows2K系列的每修改一次系统管理员Administrator的密码就是一次浩大的工程,windows的每个计划任务scheduler都要更改密码;CentOS下修改root密码就简单多了,一条passwd命令就解决问题了,而且不影响crontab的执行。
每条JOB执行完毕之后,系统会自动将输出发送邮件给当前系统用户。
日积月累,非常的多,甚至会撑爆整个系统。
所以每条JOB命令后面进行重定向处理是非常必要的:
>>/dev/null2>&1。
前提是对Job中的命令需要正常输出已经作了一定的处理,比如追加到某个特定日志文件;>>/dev/null2>&1表示把所有标准输出发送到/dev/null(linux的回收站),把标准错误输出
(2)发送到和标准输出
(1)同样的地方(即/dev/null)。
运行这行命令将不会产生任何输出。
举例说明如下:
30151361*roottarczf/usr/local/backups/daily/etc.tar.gz/etc>>/dev/null2>&1
CentOS/FreeBSD下用crontab定时执行PHP程序的正确方法如下:
在linux下,可以使用crontab+php的方法:
1、使用crontab–e编辑定时任务
内容为:
xx:
xx:
xx执行一个test.php文件
2、php文件必须在文件头一行,加上解释器路径(就象perl做的那样)
#!
/usr/local/bin/php
PHP的执行需要Apache的支持,shell脚本的执行需要Linux的支持,而Linux支持定时运行某个程序的功能。
---------------------------------------------------------------
将PHP作为Shell脚本语言使用(转载)
--英文原著:
DarrellBrogdon,发表于
※我比较懒哈,以前的方法就是直接在/etc/crontab里直接带上php路径,如
*/5****rootphptest.php
也能正确执行;有兴趣的朋友可写一个hello程序测试,将其所有输出到一个文件即可测试,我做了大量测试证明其可执行性;当然你的php要保证其正确性,建议你的每一个crontab计划任务先在shell中先正确运行一次后再写进crontab里,这是保证成功的必要条件。
crontab如何以秒为执行你的Linux计划任务呢,许多同事和同学都问过我这个问题。
其实这个问题很简单,我以实例说明下:
我以前的办公室是一台ubuntu服务器,连接ADSL作NAT带办公室的机器上网,很不幸的发现,这样ADSL爱掉线,一掉线网关gateway就没了,所以写了一个shell脚本
#!
/bin/bash
while:
do
ifroute|tail-l|grep"0.0.0.0"
then
&>/dev/null
else
adsl-stop
adsl-start
fi
sleep10
done
将程序放进后台执行。
执行脚本方法nuhupshroute.sh&,注意前面要用上nohup,这样避免root用户logout时此脚本也退出生效的问题。
程序的运行间隔时间是10s,很多同学不明解为什么要加一个sleep10;大家可以拿虚拟机测试下,如果没有这条sleep10的语句,你的Linux服务器会运行大量此route.sh,很快耗光你的服务器资源,你的系统负载会很快上去,Nagios马上会叫起来的~
另一个就是监控负载均衡器Nginx的shell脚本,用于Nginx+Keepalived负载均衡高可用环境:
#!
/bin/bash
while:
do
nginxpid=`ps-Cnginx--no-header|wc-l`
if[$nginxpid-eq0];then
/usr/local/nginx/sbin/nginx
sleep5
if[$nginxpid-eq0];then
/etc/init.d/keepalivedstop
fi
fi
sleep5
done
另外,这里附带说下crontab的一个妙用:
我在配置一台服务器的iptables时,不小心设置了某一项错误参数,结果锁定了SSH会话,导致我们经理及另一系统管理员员连不上服务器,郁闷之余,看到此法特推荐给大家,极其有用,建议大家学习参考:
可以配置一计划任务crontab,每5分钟运行一次,即*/5****root/bin/sh/root/firestop.sh
firestop.sh内容为
#/bin/bash
serviceiptablesstop
这样即使你的脚本存在错误设置(或丢失的)规则时,也不至于将你锁在计算机外而无法返回与计算机的连接,让你放心大胆的调试你的脚本。
最后说明下Crontab任务的执行环境问题。
尽管可以更改执行cron任务時使用的环境,但经常最好创建一個包装脚本,以在运行实际需要的命令前定义任何环境境变量(如PATH)。
这样做的部分原因是出于安全考虑;向crontab作业开放的区域越多,越可能得到包含可疑內容的東西。
另一个原因是,这样可确保即使更改了环境中的一个依赖关系,你的crontab作仍将执行。
Crontab命令的语法
crontab命令的用途就是:
提交、编辑、列出或除去cron作业。
语法
crontab[-e[UserName]|-l[UserName]|-r[UserName]|-v[UserName]|File]
描述
crontab命令提交、编辑、列出或除去cron作业。
一个cron作业是一个命令,其运行是由cron守护程序在规则的调度间隔执行的。
要提交一个cron作业,指定crontab命令用-e标志。
crontab命令调用一个编辑会话,允许创建一个crontab文件。
在这个文件中,为每个cron创建条目。
每个条目必须是一种cron守护程序可接受的格式。
要得到创建条目的信息,参阅crontab文件条目格式。
当创建完条目和退出文件后,crontab命令将它复制到/var/spool/cron/crontabs目录,并把它放到一个文件中,此文件的名称是当前的用户名。
如果以用户名命名的文件已存在于crontabs目录中,crontab命令会覆盖它。
同样的,可以通过指定文件参数创建crontab文件。
如果此文件已经存在,格式必须是cron守护程序所需要的。
如果文件不存在,crontab命令就调用编辑器。
如果EDITOR环境变量存在,此命令就调用它指定的编辑器。
否则,crontab命令调用vi编辑器。
要列出crontab文件的内容,就指定crontab命令并采用-l标志。
要除去存在的文件,采用-r标志。
可选的UserName参数可被crontab文件的所有者或者root用户来使用,为指定的用户编辑、列出、除去或验证cron作业的状态。
如果UserName是无效的,就会产生错误消息并退出程序。
如果可选的UserName参数没有被指定,这个crontab标志对于root用户和当前用户可用。
安全性
只有root用户和crontab文件的所有者可以在-e、-l、-r和-v标志后面使用UserName以编辑、列出、除去或验证指定用户的crontab文件。
cron守护程序
这个cron守护程序运行的命令和crontab文件条目是相对应的。
如果不重新定向cron作业的输出为标准输出或标准错误,cron守护程序就会通过电子邮件告知您任何命令输出或错误。
如果在crontab文件中指定了不正确的cron作业,这个cron守护程序不运行这个作业。
cron守护程序只在cron守护程序被初始化时检查crontab文件。
当用crontab命令改变crontab文件时,指示变化的消息被发送到cron守护程序。
这消除了在规则的调度间隔检查新的或改变的文件的开销。
控制使用crontab命令
/var/adm/cron/cron.allow和/var/adm/cron/cron.deny文件控制哪一个用户可以使用crontab命令。
root用户可以创建、编辑或删除这些文件。
这些文件中的条目是用户登录名,每行一个名称。
如果登录标识和多个的登录名称相关联,这个crontab命令采用第一个在/etc/passwd文件中的登录名称,而不管当前实际使用哪一个登录名称。
而且,要允许用户启动cron作业,应该使用chuser命令将/etc/security/user文件中的守护程序属性设置为TRUE。
以下关于cron.allow文件的一个示例:
rootnickdeesarah
如果cron.allow文件存在,只有在文件中出现其登录名称的用户可以使用crontab命令。
root用户的登录名必须出现在cron.allow文件中,如果这个文件存在的话。
系统管理员可以明确的停止一个用户,通过使用crontab命令,同时在cron.deny文件中列出用户的登录名。
如果只有cron.deny文件存在,任一名称没有出现在这个文件中的用户可以使用crontab命令。
如果以下一个条件成立,用户将不能使用crontab命令:
cron.allow文件和cron.deny文件不存在(只允许root用户)。
cron.allow文件存在,但用户的登录名并不列在其中。
cron.deny文件存在,并且用户的登录名列在其中。
如果cron.allow和cron.deny文件都不存在,只有被root用户授权的人可以用crontab命令提交一个作业。
crontab文件条目格式
一个crontab文件包含每个cron作业的条目。
条目由换行字符分开。
每个crontab文件条目包括6个字段,它们被空格或制表符以以下格式分开:
分时日期月星期command
这些字段接收以下值:
分0到59
时0到23
日期1到31
月1到12
星期0到6(星期日到星期六)
commandshell命令
必须为每个字段指定一个值。
除了command字段,这些字段可以包含以下内容:
指定范围内的一个数。
要在5月运行一个命令,在month字段指定5。
两个被破折号分开的数目表明了包含的范围。
要从星期二到星期五运行cron作业,把2-5放到weekday字段中。
由逗号隔开的数字列表。
要在一月第一天和最后一天的运行命令,在day_of_month字段中可指定1,31。
*(星号),意味着所有的允许值。
要每个小时运行一个作业,在小时字段指定一个星号。
注:
任一字符前如有一个反斜杠符号(包括%)会引起字符被字面上的处理。
天的规范是由两个字段(月的天和星期的天)组成的。
如果指定两者都为元素的一个列表,这两个字段均被包含在其中。
例如,如下条目:
001,15*1command
将在每个月的第一天和第十五天运行command,还有每个星期一。
要仅在一个字段中指定天,另一字段应包含*。
指定命令
这个cron守护程序运行命名于所选日期和时间的第六个字段中的字段。
如果包含一个%(百分号)在第六字段,cron守护程序像命令调用一样处理所有的任务,并使所有的后续任务在标准输入上可用,除非转义百分号(\%)。
空行和第一个非空字符是编号标记(#)将被忽略。
如果命令含有反斜杠(\)的参数,反斜杠前应加另一个反斜杠。
注:
shell只运行该命令字段的第一行。
所有其他的行作为标准的输入对于命令可用。
cron守护程序从HOME目录中启动一个子shell。
如果调度一个命令运行,这时您尚未登录,并且希望在.profile文件中的命令运行,这个命令必须明确的读取您的.profile文件。
cron守护程序为每个shell提供了一个缺省的环境,定义了HOME,LOGNAME,SHELL(=/usr/bin/sh)和PATH(=/usr/bin)。
标志
-eUserName编辑用户的crontab文件的副本,或者,如果一个有效的UserName的crontab文件不存在则创建一个空的文件进行编辑。
当编辑完成后,文件被到crontab目录作为用户的crontab文件。
-lUserName列出用户的crontab文件。
-rUserName从crontab目录除去用户的crontab文件。
-vUserName列出用户cron作业的状态。
安全性
审计事件:
如果审计子系统已经被正确的配置和启用,crontab守护程序就会当每次执行命令时产生以下审计记录(或事件):
事件信息
CRON_JobRemove列出哪一个用户除去了cron作业和除去的时间。
CRON_JobAdd列出哪一个用户添加了cron作业和添加的时间。
有关如何正确选择和分组审计事件以及如何配置审计事件数据收集的更详细信息,请参阅《安全性》中的SettingupAuditing。
退出状态
该命令返回以下退出值:
0成功完成。
>0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- crontab 用法 详解 实例