防止shell指令碼長時間執行導致ssh超時

2022-07-17 03:03:11 字數 646 閱讀 6439

在一些對安全性要求較高的場景下。ssh的超時時間是管理員預先設定好的,在閒置一段時間後ssh連線會自己主動斷開。

這樣的情況下假設通過ssh執行指令碼,而指令碼執行時間又比較長的話。會導致sshclient和server長時間無互動而超時,命令執行失敗。

使用bash子程序能夠解決這樣的問題,思路是由子程序執行詳細的邏輯**,而由主程序來監控子程序的執行狀態,同一時候向控制台輸出字元來keep alive。

bash建立子程序有多重方式。這裡使用「()」,然後用「&」將其放在後台執行。儘管通過「job -p」可以獲取到後台程序的程序id並使用「wait $pid」的方式可以監控到子程序的返回狀態,如以下的**。但這樣的方式相當於堵塞了主程序,無法執行其它動作。

for pid in $(jobs -p); do

wait $pid

done

解決的方法是新建乙個標誌檔案,並將子程序返回值儲存在另外乙個暫時檔案裡,主程序通過標誌檔案和返回值來獲取相關資訊。執行其餘邏輯。

簡化**例如以下,主程序在等待時會一直列印乙個旋轉的進度標誌。

function dosomething()

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

Linux中長時間執行指令碼或者命令

nohup setsid 場景 如果只是臨時有乙個命令需要長時間執行,什麼方法能最簡便的保證它在後台穩定執行呢?解決方法 我們知道,當使用者登出 logout 或者網路斷開時,終端會收到 hup hangup 訊號從而關閉其所有子程序。因此,我們的解決辦法就有兩種途徑 要麼讓程序忽略 hup 訊號,...

1 12 長時間執行乙個任務

1.12.長時間執行乙個任務 問題 我要長時間執行乙個任務 解決辦法 使用 timer 類,或者監聽 sprite 的 enterframe 事件 討論 timer 類是actionscript 3.0新增的,來代替早期的 setinterval 和 settimeout 函式。當建立timer類的...

防止shell指令碼重複執行

利用鎖機制,讓乙個特定的shell指令碼,每次只能執行乙個例項。具體來說,獲得鎖的指令碼例項,能夠繼續往下執行臨界區 沒有獲得鎖的例項,則只能等待。例如,要求指令碼只能順序訪問某個資源,例如磁碟檔案等,就可以參考下面的實現。bin bash file locking using bash.ver 0...