安排Java作业每周运行一次,每次使用不同的参数

时间:2017-01-21 18:55:43

标签: java linux cron

所以我目前正在设计一个每周运行一次的发票系统。我们将客户分成4个周期,每周运行一次。安排Cron作业每周运行一次的最佳方法是什么,但每次根据每月的哪一天都有一个特定的参数。例如,我希望所有在每月8日收到发票的客户在每月8日的凌晨12:00发出。接下来的一周,我想运行完全相同的程序,除了我想在15日运行它。我应该有四个独立的工作,每个工作4个特定的参数,每个月运行一次,或者是否有更简洁的方法将所有内容保存在一个程序中,一个作业每周运行但有不同的参数?我是否在思考它?

2 个答案:

答案 0 :(得分:1)

在处理您所描述的敏感业务问题时,我绝不会依赖cron调度来管理状态。我宁愿把国家管理完全留给该计划。

因此,最好使用存储状态的数据库或文件,以便调度不会影响程序的功能。使用这种方法,您可以拥有一个每周运行一次的cron作业。

要存储的状态信息(基于您所声明的内容):

  • 客户
  • 周期数
  • 上次运行日期

该计划必须能够:

  • 不重复(如果在同一周内再次运行,则不应重复一个周期)
  • 填补空白(如果我们在一周或更长的间隔后运行它,它应该能够运行所有错过的周期)

答案 1 :(得分:0)

你过度思考它;) 您可以像这样在所有4个周期中输入cron:

0 0 8,15,22,29 * * command

并添加case switch或if语句检查日期的日期+"%d",但这会使任务复杂化。更不用说可读性了。

其他方法是创建一个包装脚本来保存所有' case'上面提到的逻辑并将包装器设置为cron命令。 e.g。

day_of_month=$(date +'%d')
case "${day_of_month}" in
'8') params='your params here' ;;
...
esac
/your/program "${params}"

您始终可以保持简单并使用4个单独的crontab条目。