給Laravel寫個任務調度定時器

微信公衆號:網管小賈
個人博客:www.sysadm.cc

Laravel的任務調度很棒,統一把任務定義在源代碼中而非操作系統中。

這樣做當然方便維護,只需一個命令就可以啓動任務:

php artisan schedule:run


不過嘛,由於任務是寫在源代碼中的,只有執行了這個命令,任務纔有可能被觸發執行。

要不說Linux強大呢,早就有Cron這樣的調度器了。

再看看Windows呢,好像有個任務計劃程序,貌似也能實現相同的功能。

我通常調試程序都在Windows下,所以現在我想自己寫個簡單的定時器。

翻開以前的VB文檔,依葫蘆畫瓢地攢了個任務調度定時器。
任務調度定時器

一、要實現的功能

1.每單位時間循環執行一次程序

2.可自定義循環時間(1000ms ~ 60000ms)

3.可自定義執行的程序(Path\foo.bat)


部分代碼:

'*************************************************************************
'**代碼名稱:給Laravel寫個任務調度定時器
'**描    述:每隔自定義時間定時執行指定程序,用於Laravel任務調度
'**模 塊 名:frmMain
'**創 建 人:網管小賈
'**日    期:2020-03-16 16:16:16
'**修 改 人:
'**版    本:V2003.16.0.1616
'*************************************************************************
Private Const STR_MESSAGE_TITLE = "AT for Laravel"
Private Const STR_VERSION = "2003.12.0.1645"
Private Const STR_COPYRIGHT = "<---- 掃描二維碼關注微信公衆號<網管小賈>"

Private strIniFileName As String '配置文件名
Private strSectionText As String '配置項
Private strKeyText As String '配置鍵
Private strKeyValueText As String '配置健值

Private strInterval As String '時鐘間隔
Private strProgram As String '執行程序路徑

Private Sub Form_Load()
On Error GoTo errorHandle

lblTitle.Caption = STR_MESSAGE_TITLE
lblVersion.Caption = STR_VERSION
lblExplain.Caption = "Ini File: Interval:1000 - 60000 | Program: Path\foo.bat"
lblEmail.Caption = "作者:網管小賈    微信公衆號:網管小賈"
lblCopyright.Caption = STR_COPYRIGHT

strIniFileName = App.Path & "\" & App.ProductName & ".ini"
strSectionText = "CONFIGURATION"

If SectionExists(strIniFileName, strSectionText) Then
  Dim tmpKeyValueText(2) As String
  
  strKeyText = "INTERVAL"
  tmpKeyValueText(0) = GetKeyVal(strIniFileName, strSectionText, strKeyText)
  
  strKeyText = "PROGRAM"
  tmpKeyValueText(1) = GetKeyVal(strIniFileName, strSectionText, strKeyText)
  
  If Len(Trim(tmpKeyValueText(0))) = 0 Or Len(Trim(tmpKeyValueText(1))) = 0 Then
      MsgBox "Configuration is not correct!!", vbExclamation + vbOKOnly, STR_MESSAGE_TITLE
      End
  Else
      strInterval = tmpKeyValueText(0)
      strProgram = tmpKeyValueText(1)
  End If
Else
  MsgBox "Configuration is not correct!!", vbExclamation + vbOKOnly, STR_MESSAGE_TITLE
  End
End If

	'程序打開即開始檢查執行
tmrAT.Interval = strInterval

Exit Sub

errorHandle:
MsgBox Err.Description, vbCritical + vbOKOnly, STR_MESSAGE_TITLE
End
End Sub

Private Sub tmrAT_Timer()
	On Error resume next
Shell strProgram, vbHide
End Sub

微信公衆號:網管小賈
個人博客:www.sysadm.cc

二、其中注意事項

1、由於VB時鐘控件的限制,最大間隔爲60秒,即一分鐘。

每一分鐘檢查並執行我們指定的程序,這對執行Laravel任務是足夠了。

如果需要間隔更大時間,可以採用其他方法,以後有機會會介紹。

2、爲保存配置內容,使用了ini文件讀取配置的方法。

具體可參看代碼,不難。

當然,如果要在程序運行時實時讀取保存配置值,可以另外寫代碼實現。

3、執行程序的路徑應該是完全路徑,不要使用相對路徑。

C:\mypath\foo.exe

4、執行程序 foo.bat 中也應該是完全路徑。

如:C:\php\php7.x.x\php.exe C:\laravelproject\artisan schedule:run


如有什麼問題,歡迎關注我的公衆號參與留言討論。

最後附上下載鏈接,慵懶的同學可以直接拿來用。


程序安裝包(可直接使用)

程序源代碼

程序安裝包 密碼:l0v7(可直接使用)

程序源代碼 密碼:232b

公衆號:網管小賈

微信公衆號:網管小賈
個人博客:www.sysadm.cc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章