Cron 任务计划程序如何启动作业?
当任务调度器(例如cron)触发任务(例如cron作业)时,它是通过每最短时间段(例如秒)“轮询”时钟来实现的,还是在时间到来时注册一个“推送”的回调 如果是推送/回调,底层平台(如linux)是如何实现的?对于基于时间的事件,是否存在“硬件中断”或其他回调机制 那么,任务计划程序如何启动作业呢?从手册页: 然后cron实用程序每分钟都会唤醒一次,检查所有存储的crontab,检查每个命令,看它是否应该在当前分钟内运行。执行命令时,任何 输出通过邮件发送给crontab的所有者(或者发送给crontab中MAILTO环境变量中指定的用户,如果存在) 守护进程是用于运行后台进程的程序。和克朗 是执行预定命令的守护进程。获取这些命令 Cron查找/etc/crontab或/usr/lib/Cron/tabs和 如果存在任何命令文件,Cron将执行该文件。克朗 实用程序由已启动的进程启动,该进程将init替换为 pid 1Cron 任务计划程序如何启动作业?,cron,scheduled-tasks,scheduler,Cron,Scheduled Tasks,Scheduler,当任务调度器(例如cron)触发任务(例如cron作业)时,它是通过每最短时间段(例如秒)“轮询”时钟来实现的,还是在时间到来时注册一个“推送”的回调 如果是推送/回调,底层平台(如linux)是如何实现的?对于基于时间的事件,是否存在“硬件中断”或其他回调机制 那么,任务计划程序如何启动作业呢?从手册页: 然后cron实用程序每分钟都会唤醒一次,检查所有存储的crontab,检查每个命令,看它是否应该在当前分钟内运行。执行命令时,任何 输出通过邮件发送给crontab的所有者(或者发送给cro
最终可能取决于实施情况。有些执行轮询(如上所述),但有些使用中断方法(检查何时必须运行下一个任务并设置系统警报)。Unix版本7上的cron具有以下算法: 其算法非常简单: 1) 读取/usr/etc/crontab 2) 确定是否必须在当前日期和时间运行任何命令,如果是,请以超级用户root身份运行这些命令。 3) 睡一分钟 4) 重复步骤1 但这对系统来说是沉重的负担。并用于为多用户环境占用大量资源。然后设计了一种新算法: 此cron使用的算法如下所示: 1) 启动时,在所有帐户持有人的主目录中查找名为.crontab的文件。 2) 对于找到的每个crontab文件,确定今后必须运行每个命令的下一次时间。 3) 将这些命令及其相应的时间和“五字段”时间说明符放在Franta Maly事件列表上。 4) 进入主循环:
现代的实现是vixiecron和anacron。这被fcron取代。我对它们的实现细节没有太多的了解。这个问题的目的不是关于CRON,而是通常以CRON为例进行任务调度,如果问题陈述中不清楚的话,很抱歉 我想知道最底层的软件是如何进行基于时间的调度的,如果它必须轮询硬件时钟,或者对于基于时间的事件是否存在某种硬件中断 事实证明,实际上有一个硬件中断。来自wilipedia: 一个典型的用途是通过将 晶体振荡器的输出,具有中断处理程序计数 为了保持时间,电话中断了。这些周期性中断是 通常被操作系统的任务调度器用来重新安排任务的优先级 运行进程。一些较旧的计算机产生周期性中断 从电源线频率,因为它是由 消除电子钟长期漂移的实用程序
因此,尽管cron进行轮询(感谢@joshua nelson),但也有可能不进行轮询,操作系统也不进行轮询。这是我最感兴趣的,不是cron,而是最低级别触发器的触发方式。如果这是由操作系统设置的,它是如何依次触发的?操作系统是否“轮询”或是否存在任何类型的“基于时间的硬件中断”。。。