Task schedule - once a month but different day each month
I need to ran a task on a specified days (once a month but a different day each month).
How can I do that in Task Manager?
I need to ran a task on a specified days (once a month but a different day each month).
How can I do that in Task Manager?
Task scheduler quite flexible
Monthly simple
Or more advanced way
Do you have another algorithm, which can't be covered by this?
If so, you can write a task, which will re-schedule itself when launched.
It's a custom psudo-random day each month.
How to reschedule task on completion on a custom date?
Looks like rescheduling running task does not work. But it is possible to create a new one, which runs once.
I have found a workaround.
1. Create task class as usual.
2. Create this subclass extending (1)
/// Run it daily but it would actually run only on Dates Class util.CustomDatesTask Extends util.BaseTask { Parameter TaskName = "BaseTask (random dates)"; /// Comma separated Dates in YYYY-MM-DD format /// Example: 2019-12-11,2020-01-17,2020-02-11,2020-03-10,2020-04-09,2020-05-12 Property Dates As %VarString; /// Check that Dates is valid Method %OnValidateObject() As %Status { #dim sc As %Status = $$$OK set sc = ##super() quit:$$$ISERR(sc) sc try { set dates = $lfs(..Dates) } catch ex { set sc = ex.AsStatus() set sc = $$$ADDSC($$$ERROR($$$GeneralError, "Incorrect Dates value: " _ ..Dates), sc) } quit:$$$ISERR(sc) sc for i=1:1:$ll(dates) { try { set date = $lg(dates, i) set temp = $zdh(date, 3) } catch ex { set sc = ex.AsStatus() set sc = $$$ADDSC($$$ERROR($$$GeneralError, "Incorrect Date value: " _ date), sc) } quit:$$$ISERR(sc) } quit sc } Method OnTask() As %Status { #dim sc As %Status = $$$OK set dates = $lfs(..Dates) set curDate = $zd($h, 3) if $lf(dates, curDate) { // Execute the task set sc = ##super() } quit sc } }
The advantage is that schedule is easy to set as a task config property. Drawback is that logs would be created for each day.