寫了一個監控負載的小腳本(死循環,測試結束后再kill對應進程),因需要監控多台服務器,所以在一台服務器上使用ssh統一執行腳本
遇到問題:
使用ssh root@172.16.146.20 '/usr/local/luly/loadavg.sh 2 2 &'執行
本機沒有即時退出,占用ssh連接
本意是發送命令到遠程機執行,本機發送后直接退出
嘗試:
1、增加nohup,效果相同:
ssh root@172.16.146.20 'nohup /usr/local/luly/loadavg.sh 2 2 &'
2、增加網絡上說的-t 、 -tt 參數,也沒有用
ssh -t root@172.16.146.20 '/usr/local/luly/loadavg.sh 2 2 &'
ssh -tt root@172.16.146.20 '/usr/local/luly/loadavg.sh 2 2 &'
3、去掉引號,本機也在后台運行,占用ssh連接,必須手動kill才行,非我所想
ssh root@172.16.146.20 /usr/local/luly/loadavg.sh 2 2 &
最終解決方案:
增加>/dev/null 2>&1,本機即時退出,沒有進程遺留,遠程后台執行腳本,達到目的
ssh root@172.16.146.20 '/usr/local/luly/loadavg.sh 2 2 >/dev/null 2>&1 &'
監控負載腳本:
# cat loadavg.sh #!/bin/bash USAGE="Usage: $0 second filename" if [ $# -ne 2 ]; then echo $USAGE exit 1 fi > /tmp/monitor/loadavg/146.20_loadavg_$2.log while [[ 1=1 ]] do uptime >> /tmp/monitor/loadavg/146.20_loadavg_$2.log sleep $1 done