`
yugouai
  • 浏览: 498550 次
  • 性别: 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定时任务以及脚本编写docx

    本文档将详细介绍如何创建和配置Linux定时任务,以及编写和执行简单的shell脚本。 首先,让我们看看脚本样例1,这是一个用于监控Linux服务器性能的bash脚本。它包含以下几个关键部分: 1. **获取服务器IP地址**:...

    Linux网络驱动程序编写

    "Linux网络驱动程序编写" Linux网络驱动程序编写是指在Linux系统中开发和编写网络设备驱动程序的过程。该过程需要对Linux系统的设备驱动程序有深入的了解,包括字符设备、块设备和网络设备等。 Linux设备驱动程序...

    linux驱动程序的编写

    为了更好地理解和编写Linux驱动程序,我们需要掌握以下几个关键技术: 1. **时钟机制**:在设备驱动程序中,常常需要使用到定时功能,比如协议的超时处理、轮询操作等。Linux提供了多种时钟机制,包括定时器和延时...

    Java编写的linux下定时通过ftp上传文件

    3. **Linux定时任务**: - 在Linux中,我们可以使用`cron`来创建定时任务。在终端中,使用`crontab -e`命令编辑定时任务文件。 - 添加一条定时任务,例如每小时执行一次Java程序: ``` 0 * * * * java -jar /...

    编写Linux系统下Daemon程序的方法步骤

    在Linux系统中,Daemon程序是不可或缺的一部分,它们作为后台服务长期运行,提供各种系统功能和服务。Daemon不依赖于任何终端,通常在系统启动时启动,系统关闭时终止。这类程序通常用于网络服务(如HTTP服务器)、...

    linux下定时执行脚本

    在Linux系统中,定时执行脚本是一项非常常见的任务,它可以帮助我们自动化地完成日常的维护工作,例如数据备份、日志清理等。本篇将基于标题"Linux下定时执行脚本"来详细讲解如何在Linux环境下设置定时任务,并结合...

    linux 里定时执行删除日志

    在Linux系统中,定时执行任务是一项非常实用的功能,尤其对于自动化运维、系统监控以及资源管理等方面至关重要。本文将深入解析如何在Linux环境下设置定时任务来定期执行特定操作,特别是删除日志或无用文件,以释放...

    Linux定时任务1

    Linux定时任务是Linux系统中非常重要的功能,它允许用户或系统自动执行预定的任务,无需人工干预。这在服务器管理和自动化运维中尤其有用。本文将详细探讨Linux定时任务的相关知识点。 首先,程序是预编写的执行...

    linux网络驱动程序编写.pdf

    编写Linux设备驱动程序时,需要理解以下几个基本概念: - **发送和接收**: 网络设备最基本的功能是收发数据。操作系统需要知道如何调用驱动程序的发送函数,并且当硬件接收到数据时,驱动程序需要将这些数据提交给...

    Linux定时执行程序Cronb.docx

    【Linux定时执行程序Cron】 在Linux系统中,Cron是一个强大的定时任务调度器,用于在特定时间执行预设的任务。对于系统维护和自动化工作流程来说,Cron扮演着至关重要的角色。根据提供的描述,我们需要在客户服务器...

    Linux操作系统网络驱动程序编写.pdf

    编写Linux设备驱动程序时,有几个核心概念需要理解: - **发送和接收**:这是网络设备的核心功能。驱动程序需要提供发送函数和接收函数,以便操作系统可以调度数据的传输。 - **中断**:中断是现代计算机架构中的...

    Linux操作系统网络驱动程序编写

    编写Linux驱动程序时,有几个核心概念非常重要,这些概念不仅适用于网络设备驱动,也适用于其他类型的设备驱动。 - **发送和接收**:这是网络设备最基本的功能之一。驱动程序需要向系统注册发送函数,以便当有数据...

    linux服务器如何每天定时的备份mysql

    本文将详细介绍如何通过编写Shell脚本并结合Cron定时任务,在Linux服务器上自动完成MySQL数据库的每日定时备份,并且只保留最近五天的备份文件。 #### 一、创建备份存储文件夹 首先,在Linux服务器上创建用于存储...

    SFTP定时扫描本地文件上传到Linux服务器

    在描述中提到的实现方式是通过编写Java程序来创建一个SFTP客户端,该客户端可以定时扫描本地文件系统以检查新文件或已完成的文件。这里涉及的Java编程技术可能包括: 1. **Java SFTP库**:如JSch(Java Secure ...

    linux-定时清除日志

    总之,通过合理设置crontab任务和编写适当的清理脚本,我们可以有效地管理Linux系统的日志文件,确保服务器的稳定运行。记得在执行任何清理操作之前,确保已经备份了重要信息,以免丢失必要的日志数据。同时,持续...

    linux定时备份文件到远程xp主机

    两种方法都能达到相同的效果,但清单二的流程更完整,包含了SMB服务的启动和停止。 7. **权限设置**:在Windows XP主机上,需确保D:\bak目录已设置为共享,并给予student用户读写权限,以便Linux服务器能够访问和...

    Linux驱动程序编写,欢迎大家下载

    ### 编写Linux驱动程序的核心概念 #### 3.1 内存管理 驱动程序的高效运行离不开良好的内存管理。在编写驱动程序时,开发者需要考虑如何合理地分配和释放内存,避免内存泄漏和资源浪费。 #### 3.2 事件同步与时钟...

Global site tag (gtag.js) - Google Analytics