2017-08-24 6943 views
2

我需要創建一個將在每個月的每一個最後一天運行的cron表達式。我需要這個安排webjob。在每個月的最後一天運行的Cron表達式

我正在使用此表達式,但webjob沒有采取L查找每月的最後一天。

"0 0 11 L * *"

謝謝。

+0

您是否嘗試過使用'Last'而不是'L'? –

+0

你解決了這個問題嗎,你需要進一步的幫助嗎? –

回答

1

根據你的描述,我在這邊查了這個問題。一個簡單的方法,首先我測試了它在Azure上門戶網站如下:

enter image description here

注:根據我的測試,特殊字符(?LW)爲{day}是無效的。

而且,我跑我與0/5 * * L * *表達側webjob,然後我得到了以下錯誤:

Unhandled Exception: Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException: Error indexing method 'Functions.CronJob' ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. --->NCrontab.CrontabException: 'L' is not a valid [Day] crontab field expression. ---> NCrontab.CrontabException: 'L' is not a valid [Day] crontab field value. It must be a numeric value between 1 and 31 (all inclusive).

然後我跟着這個樣本TimerSamples.cs,發現我們只能覆蓋內建DailyScheduleWeeklySchedule,但他們不能滿足您的要求,我認爲您可能需要構建自定義時間表繼承TimerSchedule以實現您的目的。 AFAIK,我們還可以利用Azure Scheduler在某個時間表上觸發我們的webjob,除了使用您的webjob設置cron表達式。這裏是我的測試,你可以參考一下吧:

  • 配置您webjob手動觸發

  • 登錄到azure portal,添加您Azure Scheduler,然後配置操作設置點你webjob端點允許被觸發。有關詳細信息,你可以參考部分有關本tutorial

  • 添加調度工作,然後配置日程安排如下:

    enter image description here

此外,對於全cron表達式支持,您可以在Azure/azure-webjobs-sdk-extensions問題上添加您的反饋。

0

我們目前不支持'L'。我們使用ncrontab來解析cron表達式,作者指出這不支持:atifaziz/NCrontab#9

我見過的一種替代方法:爲28-31或每個月設置一個cron表達式,函數本身檢查它是否實際是本月的最後一天。如果沒有,退出;如果是這樣,繼續。

相關問題