`
yugouai
  • 浏览: 490726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

编写Linux定时处理程序的方法

 
阅读更多
本文要写的Linux定时处理程序,想必这是很多Linux开发人员需要处理的问题。例如编写一个每天数据入库程序,编写一个定时邮件通知程序等等。

  对于定时处理程序,主要有两种方法可以实现。一种是使用crontab来做程序的定时启动,实现定时处理功能,一种是通过守护进程,间隔一段时间处理一次。

  下面对这两种实现做一些分析。

  crontab 是用来设置被周期性执行的指令。可以设置每隔一段时间执行一次程序,执行的方法是新建一个进程来进行处理。通过编写一个cronfile定时处理文件即可,例如每隔20分钟,执行一个backup操作:

  */20 * * * * /usr/bin/backup

  程序会在0分,20分,40分的时候启动一个/usr/bin/backup进程。

  crontab的优点是可以指定确切的时间点启动程序,可以准确控制每次执行的间隔(两次开始执行程序的时间间隔)。但是由于crontab每次是通过新建一个进程来进行处理,如果间隔时间太短以至于上一个进程还未处理完,却已启动第二次处理,这时两个同样的进程在运行,必定就有一些资源的竞争和冲突。如果通过进程本身的程序区兼容这种竞争,会让程序变得过于复杂。如果是对执行时间点没有很高要求,可以在每次启动程序时先做进程检查,如果检查到上次程序还未处理完,跳过本次处理或者延后本次处理时间。crontab的另一个缺点就是无法监控到定时程序的执行(有的程序处理时间只有零点几秒,难以进行定时扫描)。如果由于crontab本身漏洞或是系统本身问题引起crontab失效(生产机器发生过这种问题),这对于排查问题是比较麻烦的。

  编写定时程序的另一个方式是通过守护进程来实现,守护进程是一种脱离终端并且在后台运行的进程。用守护方式来编写定时程序就如:

  while(true)

  {

  process……

  sleep(SLEEP_TIME);

  }

  原理就是一个死循环,每次处理完之后休眠一段时间,再进行下一次处理。这种实现方式的好处就是可以避开资源的竞争,因为处理都是顺序进行,处理完一次之后才进行下一次处理。并且守护进程是比较好监控,它是一个常驻内存的程序,只需定时扫描进程就可很好监控程序的执行。拥有常驻内存的特性,这可以大大减少数据的载入操作,一次载入,永久使用。

  当然,编写守护程序来实现定时也有一些缺点,它并不适用于需要在确切时间点启动的程序(例如需要每天8点钟定时运行的程序),只能适合周期性,但是对运行时间点没有要求的处理。并且守护进行处理不能准确控制每次处理的间隔,它只能控制上次处理结束到下次启动的间隔。

  总的来说,这两个处理方式都能实现定时处理的任务,但是对于定时意义,还是有所差别。crontab的定时,是确定每一次执行时间点,每次启动进程的间隔一致;而守护进程的定时,是确定上一次处理结束到下一次处理结束的时间间隔。使用时需要根据具体使用场景选择。crontab在定时处理上,相对灵活一些,但需要注意资源竞争以及对执行的监控。而守护进程,效率相对高一些,并且方便监控,但需确定程序对于执行时间点是否有较高的要求。
分享到:
评论

相关推荐

    编写Linux定时处理程序

    本文要写的Linux定时处理程序,想必这是很多Linux开发人员需要处理的问题。例如编写一个每天数据入库程序,编写一个定时邮件通知程序等等。  对于定时处理程序,主要有两种方法可以实现。一种是使用crontab来做...

    linux大作业报告

    现要求用户编写一个守护进程应用程序,定时向日志文件写入字符串。 4、编写程序,在不同的进程间实现信号发送和接收,同时在传达过程中附加其他信息。 5、编写程序,使用alarm函数在系统中设置一个定时器,期间对...

    linux c++ 守护线程,判断程序是否运行,不存在就启动

    linux c++ 守护线程,判断程序是否运行,不存在就启动

    学习linux环境下c程序的示例代码.rar

    因此linux c程序基础与实例讲解linux定时关机命令,熟悉Linux文件操作是非常有必要的。本节将介绍如何在Linux环境下进行文件读写操作。 四、进程管理 进程是Linux系统中最基本的单位之一。了解进程的创建、管理和...

    电阻触摸屏定时息屏及触摸亮屏

    此代码在Ubuntu下QT5.9上编写,嵌入式linux、QT5.6版本亲测无误,可以通过事件机制实现触摸亮屏以及定时息屏保护LCD功能,详细说明,代码中readm.txt查看

    Qt编写守护进程

    则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通...

    详解使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务。可以通过命令crontab -e编写任务。当然也可以直接写配置文件设置任务。 但是有时候希望通过脚本自动设置,比如我们应用程序部署时等。有需求当然就得...

    Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下

    Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下,目录复制采用树深度优先策略。

    Linux期末考试(题多 有点难度)

    A 管道 B 输入输出重定向 C 执行后台进程 D 处理程序命令 114.下列对shell变量FRUIT操作,正确的是: C 。 A 为变量赋值:$FRUIT=apple B 显示变量的值:fruit=apple C 显示变量的值:echo $FRUIT D 判断变量...

    LINUX操作系统(电子教案,参考答案)

    主要包括Linux的基本概念和操作,Linux的树型结构,Linux的文本编辑,Linux的安装和启动,用户管理,Shell编程技术,进程管理,C编译器,系统扩充,维护与监视,Linux的图形界面,网络的基本概念与设置,Linux在网络...

    Linux常用命令、日常开发常用

    编写sh脚本与执行(可配合crontab完成定时执行程序); 检查指定软件包是否已安装(都可结合通配符查找); 清空文件内容; 查看已安装软件的所有相关配置文件与安装目录; 复制文件、复制文本内容; 下载远程文件;...

    ThinkPHP框架实现定时执行任务的两种方法分析

    在平常的项目中我们总是会遇到需要将某个方法任务定时执行的问题,定时执行方法任务如果我们拥有服务器的权限,我们可以直接在服务器设置定时任务,例如在Windows的任务计划程序中进行设置,在Linux中编写脚本进行...

    linux实现对上传文件的定时备份、增量备份的方法

    实际上想实现基础的备份还是非常简单的,我们平常使用tar、unzip等命令打包文件,在这个基础上编写一个shell脚本,利用linux的crontab功能添加一个定时执行程序,这样就可以简单实现文件备份。但是这种方式在文件量...

    matlab最简单的代码-TimeSystem:定时执行系统

    兼容性好,需要定时的任务只依赖于控制台命令,能在命令行中执行的程序都可以执行。意味着可以定时执行包括exe在内的,python,nodejs,甚至matlab等程序 扩展性强,目前可以直接通过对数据库的操作来修改各个任务的...

    MYSQL定时清除备份数据的具体操作

    基于Linux下Crontab来基于cron表达式构建定时任务文档必定需要编写对应的脚本,但是在这个脚本中,由于需要操作数据库,必定会涉及到明文密码这样的一个数据,这样不是很安全。 由于使用到的是MYSQL数据库,而...

    Qt编写串口调试助手V2016终结版

    与硬件通信的程序基本上要用到串口,虽然qt5以后集成了串口通信类,但是个人觉得那个串口通信类有点问题,在linux上表现很好,windows上大数据会有怪怪的问题出现,而且只能在qt5以上的版本才能用,无奈大部分的...

    Linux编程之《守护进程》

    它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程...

    嵌入式Linux下硬件中断驱动程序的开发.pdf

    +摘要, 通过将摩托罗拉 -./01"234-15&6& 微处理器内集成的定时记数器作为字符设备使用并产生中断的 编程实例, 介绍了嵌入式 !"#$% 下硬件中断驱动程序的编写。

    c语言编写单片机技巧

    此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且...

Global site tag (gtag.js) - Google Analytics