在后台服务器上运行定期任务
在 tomcat/jetty 服务器上运行定期任务(如守护线程)的最佳/最简单方法是什么? 我如何启动线程? 是否有一个简单的机制或者这是一个坏主意?
What's the best/easiest way to run periodic tasks (like a daemon thread) on a tomcat/jetty server? How do I start the thread? Is there a simple mechanism or is this a bad idea at all?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果想将所有内容保留在 Java 端,请查看 Quartz。
它可以处理故障转移和作业的细粒度重新分区,并具有与 cron 作业相同的灵活性。
If want to keep everything on java side, give a look to Quartz.
It handles failover and fine grained repartition of jobs, with the same flexibility of cron jobs.
在 ServeletContext 中存储 java.util.Timer (或者更好的 ScheduledExecutor)实例是可以的并且有效的。 在 Servlet 的 init() 调用中创建它,所有 servlet 都可以向其中添加 TimerTasks。
It's okay and effective to stash a java.util.Timer (or better yet ScheduledExecutor) instance in your ServeletContext. Create it in a Servlet's init() call and all your servlets can add TimerTasks to it.
一种适用于许多系统的通用方法就是使用一个 cron 作业来针对您的应用程序执行定期 wget。
One general purpose way which works for many systems is simply to have a cron job which performs a periodic wget against your app.
我无法回答 tomcat/jetty 的问题,但我已经用基于 Python 的网络应用程序做过类似的事情。
我通常只运行一个单独的应用程序来执行所需的定期任务。 如果网站和应用程序之间需要互操作,则可以通过某种 API(使用 XML-RPC/unix 套接字/等)进行通信,甚至可以通过数据库层(如果足够的话)进行通信。
希望有帮助。
I can't answer the tomcat/jetty stuff, but I've done similar things with Python based web apps.
I normally just run a separate app that does the periodic tasks needed. If interop is needed between the website and the app, that communication can happen through some sort of API (using something like XML-RPC/unix sockets/etc) or even just through the database layer, if that's adequate.
Hope that helps.
如果您想使用 cron 作业但没有开发系统的管理访问权限,您可以通过执行以下命令来执行用户 crontab:
在大多数系统上默认使用 vi,但您可以将其更改为您的编辑器选择方式:
然后,执行 crontab -e 命令将在编辑器中启动 crontab 文件。 保存后,更改将提交回系统的 cron 中。
If you want to use a cron job but don't have administrative access to the development system, you can do a user crontab by executing the command:
It uses vi by default on most systems, but you can change it to the editor of your choice via:
Then, executing the crontab -e command will launch your crontab file in your editor. Upon saving, the changes will be committed back into the system's cron.