linux-shell-screen后台調用-后台運行腳本和命令-仿start命令-偽窗口界面


我比較熟練bat、cmd腳本。剛接觸使用shell時,總會習慣想用windows窗口界面來套用shell腳本。於是找到screen后台命令,它可以交互shell腳本,保持后台運行。但是在批處理batch、cmd環境下,使用start 可以調用彈出其它cmd腳本。在使用screen命令彈出新會話后,總是需要手動按鍵斷開會話。此文章特意為解決這個問而提出解決辦法和實驗過程與結果,即使用腳本或命令自動調用后台命令或后台腳本,無需系統等待或人工干預。供大家學習和參考。歡迎討論。順帶吐槽的是,這個需求或解決辦法,幾乎很少很難在搜索引擎結果中有效出現,所以我將它寫下發布出來,供大家學習和自己使用。

參考文章

ssh遠程執行腳本並在后台運行,通過screen解決 http://blog.uouo123.com/post/823.html

文章出現重要線索:screen -x -S $screen_name -p 0 -X stuff "$cmd"  

shell嵌套expect執行screen命令 https://blog.csdn.net/xbw12138/article/details/79271575

文章展示出部分shell代碼,加入了expect命令。同樣出現重要線索:screen -x -S $screen_name -p 0 -X stuff "$cmd"  

我個人認為沒必要介入expect命令,多此一舉

其它文章

文中出現線索:bash -c 'ping www.baidu.com';

后台調用命令

使用環境為:centos 6.1 已安裝screen命令。一切后台調用過程,盡可能繞開手動斷開會話過程,所以經掉查發現,使用 -dmS參數開啟一個已斷開的會話,可以繞過手動斷開操作。一般在開啟會話同時調用命令的寫法是:screen ping www.baidu.com 但是套用在這里時沒有結果:screen -dmS test ping www.baidu.com。使用screen -ls 檢查時,不是沒有創建出后台會話,就是進入會話是黑屏。即,沒有命令被執行。所以經測試查找。配合使用bash -c參數,才可以在后台調用命令。完整命令如下:

screen -dmS test bash -c 'ping www.baidu.com';

其中 -dmS test 指 后台靜默創建名稱為 test 的會話,會話名比較重要。

bash -c 'ping www.baidu.com' 指 會話中 執行 ping www.baidu.com 命令

解釋

一般的shell命令,執行完就結束了。腳本調用命令豈不是多此一舉?

答:舉例中的ping命令在沒有參數情況下會一直ping下去。如果放在腳本中執行,應當是會一直執行下去,導致后續命令暫停。且一般的命令通過這個方式調用時,會話將伴隨着命令的結束而自動銷毀。已通過測試證實。

測試代碼:

screen -dmS mv;
screen -dmS test bash -c 'service crond stop';
screen -ls;

執行完畢后,應當只出現1個名稱為mv的會話

后台調用腳本

使用環境為:centos 6.1 已安裝screen命令。將命令模式下的命令內容,無論怎樣替換,始終無法執行。包括不限於這些舉例./a.sh 、sh a.sh 所以經過參考文章發現重要線索:screen -x -S $screen_name -p 0 -X stuff "$cmd"  。原理應當是發送命令至指定會話中執行,所以前期創建會話時,應指定會話名。參數 -S 指定會話 參數 -X  發送命令 參數 stuff  ?疑似?是輸出命令執行 參數 -p 指定屏幕。-x 連接斷開會話。經測試發現,不需要使用 參數 -x  。參數-p 0 指定屏幕 0是必須參數。

測試代碼:

screen -dmS test;
screen -dmS mv;
screen -S test -p 0 -X stuff "sh /0/sh/init.sh";
screen -S test -p 0 -X stuff $'\n';
screen -ls;

執行完畢后,應當只出現1個名稱為mv的會話

screen -S test -p 0 -X stuff $'\n'; 是用於執行命令“回車”的操作。否則腳本不執行。

測試中,應該保證腳本會始終執行,不結束。所以sh /0/sh/init.sh 是一段暫停並有提示內容的腳本。還原會話后,能看到暫停提示。

暫停測試腳本內容參看:https://www.cnblogs.com/date/p/10497018.html

返工

次日重新使用后台調用腳本命令時,發現失敗。后排查測試發現,在第一次成功時,客戶端等待時間做了設置。后期未做設置以至於失敗,失敗原因位置。更正后方法如下,已經過本地測試

screen -dmS test;
screen -S test -p 0 -X stuff $'stty -icanon min 0 time 30 \n\n';
screen -S test -p 0 -X stuff $'\n';
screen -S test -p 0 -X stuff $'bash /0/sh/init.sh\n';
screen -ls;

靜默銷毀后台命令

screen -ls;
screen -S test -p 0 -X stuff "exit";
screen -S test -p 0 -X stuff $'\n';
screen -ls

結束

以上內容為shell腳本通過screen命令,靜默后台調用命令或腳本,仿Windows、CMD的start命令,偽窗口界面的方法與說明。歡迎大家學習閱讀與討論指正。

贊賞碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM