Linux

Linux 中的遠端自動化工具

  • September 18, 2020

假設有一個計算環境,在 linux 中,它是靜態的和持久的。我有單向 ssh 連接,並且基礎設施是可信的——它是我的。

存在各種品牌的“企業”工具,例如 ansible,它們帶有預先固定的常式。最終,如果一個人想要修改它們,它們是一種痛苦。

接下來,你有你的氣流(dags)和 Luigis(python 中的 gnu-make 複製;python 是一種比 make 和 bash 低級的語言,不像 make 那樣不支持應用程序二進制介面)。從某種意義上說,這是一種痛苦,必須為高級任務編寫低級程式碼(python 已成為一種具有打字問題和版本控制問題的低級語言),並且您必須處理 python 包袱(虛擬 env/ anaconda/跨平台互操作)以使用任何東西。

在這些“產品、方案和工具”周圍,存在著“正常工作”的原生 unix/linux 作業系統和 docker 鏡像。

在這些 docker 映像和子系統(Linux 的 windows 子系統)中,您擁有所有這些“正常工作”的工具,包括 50 年曆史的項目“Make”,以及zsh/bash與.parallel``ssh

make實際上是完全通用的,當我想編寫一些快速自動化時,它遠遠快於我在一周或兩週內可以做的任何事情luigi/ airflow。它還可以作為辨識新工具的一種方式:如果某些東西變得太複雜,顯然它應該是一個較低級別語言的打包工具。

此外,我不會產生任何與在不同的 Linux 發行版和 Windows 之間拖拽 Python 堆依賴項相關的固定成本。


但是,似乎缺少一塊瓷磚:當我想自動化在遠端機器上執行的任務時,make 的有效性會減弱。我試過ssh -c "..."了,但結果有點麻煩。

在尋找解決方法的過程中,我遇到了pachyderm(數據科學數據版本控制)、luigi(製作複製)、airflow(不好玩)、ansible(再次:tinkery python-based time sink),也許還有其他。


我還遇到了一個 1980 年代/90 年代的工具,稱為expectand autoexpect。這個工具似乎是原生的linux,並且屬於適用於 linux、cygwin、我的遠端 linux 機器等的 windows 子系統上的“正常工作”類別。

它似乎符合要求,而且更好的是它與我make的自動化方法配合得很好。總的來說,我對automation.exp腳本內部嘈雜完全沒問題,因為它們是自動生成的。重要的部分是人工創建的組件——components.exp沒有雜亂無章的小組合(所有與新時代工具相關的流程控制、配置、使用者登錄、文件和安裝包)。

但是,autoexpect它是一個宏記錄器,您可能想要用它做的很多事情都涉及來自遠端機器的非確定性響應。這會帶來問題,除非您花時間成為expect專家。


拋開所有的序言,我很好奇:是否有替代方案autoexpect也屬於這些系統中的“公正”作品類別?

而且,為了限制顯而易見,不要尋找我的自動化系統來要求我拖著機器安裝和維護 python 虛擬環境——厭倦了處理這種混亂。

對於遠端執行,您可能需要查看env_parallel

dostuff() {
 mystuff "$@"
}
alias mystuff='echo $my'
my=My
env_parallel -S server dostuff ::: a b c

這裡的想法是讓 GNU Parallel 將環境複製到遠端伺服器。因此,可以更輕鬆地在本地伺服器上定義復雜的功能並讓它們遠端執行,而無需處理您可能遇到的報價馬戲團ssh -c "..."

目前尚不清楚您是否需要expect. 如果是這樣,這將無法滿足您的需求。

引用自:https://unix.stackexchange.com/questions/608977