本文要写的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开发人员需要处理的问题。例如编写一个每天数据入库程序,编写一个定时邮件通知程序等等。 对于定时处理程序,主要有两种方法可以实现。一种是使用crontab来做...
本文档将详细介绍如何创建和配置Linux定时任务,以及编写和执行简单的shell脚本。 首先,让我们看看脚本样例1,这是一个用于监控Linux服务器性能的bash脚本。它包含以下几个关键部分: 1. **获取服务器IP地址**:...
"Linux网络驱动程序编写" Linux网络驱动程序编写是指在Linux系统中开发和编写网络设备驱动程序的过程。该过程需要对Linux系统的设备驱动程序有深入的了解,包括字符设备、块设备和网络设备等。 Linux设备驱动程序...
为了更好地理解和编写Linux驱动程序,我们需要掌握以下几个关键技术: 1. **时钟机制**:在设备驱动程序中,常常需要使用到定时功能,比如协议的超时处理、轮询操作等。Linux提供了多种时钟机制,包括定时器和延时...
3. **Linux定时任务**: - 在Linux中,我们可以使用`cron`来创建定时任务。在终端中,使用`crontab -e`命令编辑定时任务文件。 - 添加一条定时任务,例如每小时执行一次Java程序: ``` 0 * * * * java -jar /...
在Linux系统中,Daemon程序是不可或缺的一部分,它们作为后台服务长期运行,提供各种系统功能和服务。Daemon不依赖于任何终端,通常在系统启动时启动,系统关闭时终止。这类程序通常用于网络服务(如HTTP服务器)、...
在Linux系统中,定时执行脚本是一项非常常见的任务,它可以帮助我们自动化地完成日常的维护工作,例如数据备份、日志清理等。本篇将基于标题"Linux下定时执行脚本"来详细讲解如何在Linux环境下设置定时任务,并结合...
在Linux系统中,定时执行任务是一项非常实用的功能,尤其对于自动化运维、系统监控以及资源管理等方面至关重要。本文将深入解析如何在Linux环境下设置定时任务来定期执行特定操作,特别是删除日志或无用文件,以释放...
Linux定时任务是Linux系统中非常重要的功能,它允许用户或系统自动执行预定的任务,无需人工干预。这在服务器管理和自动化运维中尤其有用。本文将详细探讨Linux定时任务的相关知识点。 首先,程序是预编写的执行...
编写Linux设备驱动程序时,需要理解以下几个基本概念: - **发送和接收**: 网络设备最基本的功能是收发数据。操作系统需要知道如何调用驱动程序的发送函数,并且当硬件接收到数据时,驱动程序需要将这些数据提交给...
【Linux定时执行程序Cron】 在Linux系统中,Cron是一个强大的定时任务调度器,用于在特定时间执行预设的任务。对于系统维护和自动化工作流程来说,Cron扮演着至关重要的角色。根据提供的描述,我们需要在客户服务器...
编写Linux设备驱动程序时,有几个核心概念需要理解: - **发送和接收**:这是网络设备的核心功能。驱动程序需要提供发送函数和接收函数,以便操作系统可以调度数据的传输。 - **中断**:中断是现代计算机架构中的...
编写Linux驱动程序时,有几个核心概念非常重要,这些概念不仅适用于网络设备驱动,也适用于其他类型的设备驱动。 - **发送和接收**:这是网络设备最基本的功能之一。驱动程序需要向系统注册发送函数,以便当有数据...
本文将详细介绍如何通过编写Shell脚本并结合Cron定时任务,在Linux服务器上自动完成MySQL数据库的每日定时备份,并且只保留最近五天的备份文件。 #### 一、创建备份存储文件夹 首先,在Linux服务器上创建用于存储...
在描述中提到的实现方式是通过编写Java程序来创建一个SFTP客户端,该客户端可以定时扫描本地文件系统以检查新文件或已完成的文件。这里涉及的Java编程技术可能包括: 1. **Java SFTP库**:如JSch(Java Secure ...
总之,通过合理设置crontab任务和编写适当的清理脚本,我们可以有效地管理Linux系统的日志文件,确保服务器的稳定运行。记得在执行任何清理操作之前,确保已经备份了重要信息,以免丢失必要的日志数据。同时,持续...
两种方法都能达到相同的效果,但清单二的流程更完整,包含了SMB服务的启动和停止。 7. **权限设置**:在Windows XP主机上,需确保D:\bak目录已设置为共享,并给予student用户读写权限,以便Linux服务器能够访问和...
### 编写Linux驱动程序的核心概念 #### 3.1 内存管理 驱动程序的高效运行离不开良好的内存管理。在编写驱动程序时,开发者需要考虑如何合理地分配和释放内存,避免内存泄漏和资源浪费。 #### 3.2 事件同步与时钟...