Windows

可以在伺服器上執行一個小的無限循環腳本嗎?

  • February 25, 2021

看起來我需要在這里為所有人更新完整的場景。

我們的使用者需要從我們的文件伺服器獲取他們需要的任何內容以同步到遠端位置,但使用者在文件伺服器上移動文件的權限有限。所以這是我的任務:

創建一個工具,使用者可以使用它來獲取數據並同步到遠端位置。DFS 和 3rd 方工具不是選項,必須是我們自己編寫的程式碼,並且一切都必須在後台執行。

這是我的方法,它現在正在工作。我製作了 3 個組件:

A** 帶有 VBS 的 HTA 應用程序位於使用者 PC 上,為使用者提供文件瀏覽器來獲取數據。

B** 允許 HTA 將數據路徑寫入 txt 文件的共享位置。此文本文件中的任何路徑都將作為軟連結進入最終位置。

C** 文件伺服器上的最終位置包含所有軟連結。

以下是它的基本工作原理:

使用者使用我製作的 HTA 從文件伺服器中選擇數據,它將完整數據路徑寫入共享位置上的 000.txt 文件。我的無限循環腳本監控這個共享位置,如果 000.txt 文件是由這個共享文件夾中的任何使用者創建的,它將呼叫另一個腳本來讀取這個 000.txt 中的所有數據路徑,並使用mklink基於路徑使用者進行軟連結提供並將軟連結輸出到最終位置,然後刪除 000.txt 文件。這個最終位置上的所有軟連結將robocopy在晚上按計劃同步。在我的 HTA 應用程序中需要的功能更多,無需多說。

由於這裡沒有人談論編碼,所以我刪除了我的無限循環程式碼,這個循環腳本從 Windows 開始並作為服務執行。我可以隨時啟動/停止它。它基本上只是監視該共享文件夾,如果任何使用者在其中創建 000.txt 文件,它將呼叫mklink.bat製作軟連結,並且在製作軟連結時將刪除 000.txt mklink.bat。我使用無限循環而不是任務調度程序的原因是使用者需要在送出數據路​​徑後立即在該最終位置查看結果。我認為任務調度程序的最小間隔是 1 分鐘,(@MikeAWood 說可以是 1 秒。謝謝!)所以我做了一個 2 秒間隔的無限循環來監視該共享文件夾。

我的問題如下:

在伺服器上執行無限循環來監控文件夾是個好主意嗎?

我在此腳本執行時監控了伺服器上的資源使用情況。我沒有看到任何顯著的消耗……所以我想它是無害的,對吧?

如果任務調度程序可以處理 1 秒的間隔,**我想我的問題就解決了。**謝謝大家。

或者,如果您有更好的方法來做到這一點,或者對我的做法有任何意見。

作為對此的一般替代方案:將您的腳本放在任務計劃程序中,並每隔一分鐘、兩分鐘等觸發一次。這更可靠,因為您的程序在重新啟動或腳本錯誤後仍然存在。如前所述,使用計劃任務不僅可以使您的程序在重新啟動後仍然存在,而且還可以通過組策略首選項使您的任務可部署到大量伺服器。您目前的解決方案是可擴展性和可靠性的敵人。

至於您正在談論的實際腳本 - 似乎您正在重新發明 DFS-R 和/或 Robocopy 的科學怪人怪物。


DFS-R是內置於 Windows Server 中的可擴展、成熟的文件複製工具。你應該看看你是否可以在這種情況下使用它。微軟在 DFS-R 中投入的工程腦力比你在做同樣事情的腳本中投入的更多。

此外,即使您由於某種原因不能使用 DFS-R,robocopy也有一個/mir開關,可以鏡像目錄。如果由於某種原因你真的不能使用 DFS-R,至少在腳本中使用類似這樣的東西。

引用自:https://serverfault.com/questions/589240