无论操作系统如何,在Java中执行计划任务的最佳解决方案是什么?

我想在我的 Java桌面应用程序上生成警报:

>设置了特定日期/时间的警报,可以在5分钟或5个月内完成
>我需要能够在触发警报时创建SWT应用程序
>我需要这个能够在任何操作系统上工作.软件用户可能拥有Windows(其中90%),其余的Mac OS(包括我)
>软件许可证必须允许我在商业程序中使用它,而不需要开源它(因此,没有GPL)
>我不能要求用户安装Cygwin,因此实现需要是Windows和Unix的原生

我正在使用Java,Eclipse,SWT进行开发,我的应用程序是使用Java Web Start从我的服务器部署的.我正在使用Mac OS X.6进行开发.

我想我有几个选择:

>在启动时运行我的应用程序,并自己处理所有内容;
>使用系统服务.
>在Unix上使用cron表,在Windows上使用Scheduled Tasks

在启动时运行

我真的不喜欢这个解决方案,我希望有更优雅的东西.
参考:I would like to run my Java program on System Startup on Mac OS/Windows. How can I do this?

系统服务

如果我将它作为系统服务运行,我可以从中受益,因为操作系统将确保我的软件:

>总是在运行
>没有/需要GUI
>失败后重启

我研究了一些我可以使用的资源:

> run4j – CPL – 仅在Windows上运行,似乎是一个有效的候选者
> jsvc – Apache 2.0 – 仅限Unix,似乎是一个有效的候选人
> Java Service Wrapper – 各种 – 我买不起付费许可证,免费的是GPL.因此,我不想/不能使用它

我在系统服务选项中的问题是:

>还有其他选择吗?
>我的计划实施是否正确:

>在应用程序启动时,检查服务是否存在
>如果没有安装:

>升级用户以安装服务(Unix上的root,Windows上的UAC)
>如果主机操作系统是Windows,请使用run4j注册该服务
>如果主机操作系统是Unix,请使用jsvc注册该服务

>如果它没有运行,请启动它

因此,在第一次运行时,应用程序将安装该服务并启动它.当应用程序关闭时,服务仍在运行,并且不再需要应用程序,除非它未注册.
但是,我想我仍然会错过“启动时运行”功能.

我对吗?我错过了什么吗?

cron /任务计划程序

在Unix上,我可以轻松使用cron表而无需应用程序将用户升级为root.我不需要处理重启,系统日期更改等.看起来不错.

在Windows上,我可以使用Task Scheduler,即使在命令行中使用AtSchTasks.这看起来不错,但我需要这个从XP到7兼容,我不能轻易测试这个.

那你会怎么做?我错过了什么?您有什么建议可以帮助我选择最好,最优雅的解决方案吗?

Bicou:很高兴你分享了你的解决方案!

请注意,“schtasks.exe”有一些本地化问题,如果你想用它创建一个每日触发器,在英语Windows上你必须使用“每日”,在德语(例如)你有改为使用“täglich”.

为了解决这个问题,我使用/ xml-option实现了对schtasks.exe的调用,提供了一个我用模板创建的临时xml文件.

创建此类模板的最简单方法是“手动”创建任务,并在任务管理GUI工具中使用“导出”功能.

相关文章
相关标签/搜索