在后台运行服务器上的定期任务

问题描述:

在tomcat/jetty服务器上运行周期性任务(如守护进程线程)的最佳/最简单的方法是什么?我如何开始线程?有一个简单的机制,或者这是一个坏主意吗?在后台运行服务器上的定期任务

在ServeletContext中存储一个java.util.Timer(或更好的ScheduledExecutor)实例是可行和有效的。在Servlet的init()调用中创建它,并且所有的servlet都可以向它添加TimerTasks。

适用于很多系统的一种通用的方式是简单地执行一个cron作业,它会对您的应用程序执行周期性wget。

+0

只需在服务器上运行cron作业,无需让它对您的应用执行wget。 – 2009-01-19 00:04:02

我无法回答tomcat/jetty的东西,但我用基于Python的web应用程序完成了类似的事情。

我通常只运行一个单独的应用程序来完成所需的周期性任务。如果网站和应用程序之间需要互操作,那么通过某种API(使用诸如XML-RPC/unix套接字/等等)甚至只是通过数据库层就可以进行通信,如果这样做足够的话。

希望有所帮助。

如果想要在java端保留所有内容,请查看Quartz
它处理故障转移和细粒度的作业重新分区,具有cron作业的相同灵活性。

+1

作为Java的Quartz框架也直接集成到正在运行的应用程序服务器中,并为您提供细粒度的控制,否则您很难用Java来实现Cron – 2009-01-19 02:52:22

+0

石英声音很好,但对我的目的来说有点矫枉过正。 – 2009-01-19 11:30:34

如果你想使用cron作业,但没有到开发系统的管理权限,您可以通过执行命令做一个用户的crontab:

crontab -e 

它在默认情况下大多数系统使用VI ,但可以将其更改为通过您选择的编辑器:

export EDITOR=/usr/local/bin/my_editor 

然后,执行的crontab -e命令将启动crontab文件,在编辑器中。保存后,更改将被重新提交到系统的cron中。