天天看點

防止shell腳本長時間運作導緻ssh逾時

在一些對安全性要求較高的場景下,ssh的逾時時間是管理者預先設定好的,在閑置一段時間後ssh連接配接會自動斷開。這種情況下如果通過ssh執行腳本,而腳本運作時間又比較長的話,會導緻ssh用戶端和伺服器長時間無互動而逾時,指令執行失敗。

使用bash子程序可以解決這種問題,思路是由子程序執行具體的邏輯代碼,而由主程序來監控子程序的執行狀态,同時向控制台輸出字元來keep alive。

bash建立子程序有多重方式,這裡使用“()”,然後用“&”将其放在背景執行。雖然通過“job -p”可以擷取到背景程序的程序id并使用“wait $pid”的方式能夠監控到子程序的傳回狀态,如下面的代碼。但這種方式相當于阻塞了主程序,無法執行其他動作。

解決辦法是建立一個标志檔案,并将子程序傳回值儲存在另外一個臨時檔案中,主程序通過标志檔案和傳回值來擷取相關資訊,執行其餘邏輯。

簡化代碼如下,主程序在等待時會一直列印一個旋轉的進度标志。

這種方式類似于通過fork函數實作相關邏輯,感覺上稍微有點笨重,不清楚bash是否有更簡便的方式來實作主子程序的資訊同步

繼續閱讀