linux crontab

  linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面本来就有很是多的计划性工做,所以这个系统服务是默认启动的。另 外, 因为使用者本身也能够设置计划任务,因此, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。linux

1、crond简介

  crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务相似,当安装完成操做系统后,默认会安装此服务 工具,而且会自动启动crond进程,crond进程每分钟会按期检查是否有要执行的任务,若是有要执行的任务,则自动执行该任务。shell

  Linux下的任务调度分为两类,系统任务调度和用户任务调度。windows

  系统任务调度:系统周期性所要执行的工做,好比写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。缓存

  前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪一个shell,这里是bash,第二行PATH变量指定了系统执行 命令的路径,第三行MAILTO变量指定了crond的任务执行信息将经过电子邮件发送给root用户,若是MAILTO变量的值为空,则表示不发送任务 执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。bash

星号(*):表明全部可能的值,例如month字段若是是星号,则表示在知足其它字段的制约条件后每个月都执行该命令操做。异步

逗号(,):能够用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”工具

中杠(-):能够用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”this

正斜线(/):能够用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线能够和星号一块儿使用,例如*/10,若是用在minute字段,表示每十分钟执行一次。操作系统

实例:日志

2、crontab中flock的使用

Linux文件锁flock

  在多个进程同时操做同一份文件的过程当中,很容易致使文件中的数据混乱,须要锁操做来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”  flock。

  flock,建议性锁,不具有强制性。一个进程使用flock将文件锁住,另外一个进程能够直接操做正在被锁的文件,修改文件中的数据,缘由在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另外一个进程写入数据的状况,内核不会阻止这个进程的写入操做,也就是建议性锁的内核处理策略。

  flock锁的释放很是具备特点,便可调用LOCK_UN参数来释放文件锁,也能够经过关闭fd的方式来释放文件锁(flock的第一个参数是fd),意味着flock会随着进程的关闭而被自动释放掉。

flock防止crontab脚本周期内未执行完重复执行

  若是某脚本要运行30分钟,能够在Crontab里把脚本间隔设为至少一小时来避免冲突。而比较糟的状况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了。如何确保只有一个脚本实例运行呢?一个好用的方法是利用lockf(FreeBSD 8.1下为lockf,CentOS 5.5下为flock),在脚本执行前先检测可否获取某个文件锁,以防止脚本运行冲突。

flock (util-linux 2.13-pre7)
Usage: flock [-sxun][-w #] fd#
        flock [-sxon][-w #] file [-c] command...
   -s  --shared     Get a shared lock 
#共享锁,在定向为某文件的FD上设置共享锁而未释放锁的时间内,其余进程试图在定向为此文件的FD上设置独占锁的请求失败,而其余进程试图在定向为此文件的FD上设置共享锁的请求会成功
   -x  --exclusive  Get an exclusive lock 
#独占或排他锁,在定向为某文件的FD上设置独占锁而未释放锁的时间内,其余进程试图在定向为此文件的FD上设置共享锁或独占锁都会失败。只要未设置-s参数,此参数默认被设置
   -u  --unlock     Remove a lock 
#手动解锁,通常状况没必要须,当FD关闭时,系统会自动解锁,此参数用于脚本命令一部分须要异步执行,一部分能够同步执行的状况
   -n  --nonblock   Fail rather than wait 
#为非阻塞模式,当试图设置锁失败,采用非阻塞模式,直接返回1,
   -w  --timeout    Wait  for  a limited amount of  time
#设置阻塞超时,当超过设置的秒数,就跳出阻塞,返回1
   -o  --close      Close file descriptor before running command
   -c  --command    Run a single command string through the shell 执行其后的comand
   -h  --help       Display  this  text
   -V  --version    Display version
相关文章
相关标签/搜索