50개 이상의 서버를 관리하기 위해 zenity 쉘 메뉴를 만들려고 하고 있으며 여러 사용자 정의 기능을 추가하고 싶습니다. 예:- 서버가 다운되면 SSH로 접속한 다음 로드, free -m, 지난 10분 동안의 apache/nginx 로그, exim 로그, mysql 느린 쿼리 로그 등을 확인하고 싶습니다. 이러한 모든 요구 사항을 충족하는 스크립트가 있습니다.
이 서버에는 SSH 키가 있으므로 SSH를 실행하는 데 문제가 없습니다.
서버에 성공적으로 로그인했지만 문제는 서버에 ssh를 실행하면 스크립트가 종료되고 서버를 종료한 후 스크립트 없이 로컬 컴퓨터의 터미널로 이동한 다음 서버 메뉴를 가져오려면 스크립트를 다시 실행해야 한다는 것입니다. 루프를 유지하는 방법을 알려주십시오. 즉, 서버 메뉴에 머무르고 아무 서버에나 SSH로 연결한 다음 서버를 종료하면 서버 메뉴로 돌아가는 방법을 의미합니다. 도와주세요. 추가로 맞춤설정하고 싶습니다.
=========== 아이디어를 제공하기 위한 짧은 스크립트입니다. 내 원본 스크립트에는 모든 서버가 있습니다 ======
#!/bin/bash
dialog --menu "select" 40 40 5 1 server.hades 2 server.fire 3 server.geb 4 server.isis 5 exit 2> /tmp/a
choice=`cat /tmp/a`
if [ $choice -eq 1 ]
then
ssh 1.2.3.4
fi
if [ $choice -eq 2 ]
then
ssh 2.3.4.5
fi
if [ $choice -eq 3 ]
then
ssh 2.3.3.5
fi
if [ $choice -eq 4 ]
then
ssh 8.3.4.8
fi
if [ $choice -eq 5 ]
then
echo "BIE BIE"
fi
답변1
일부 루프에서 스크립트를 실행하려는 것 같지만 루프가 누락되었습니다. 가장 간단한 수정은 다음과 같습니다.
[... the rest of choices ...]
if [ $choice -eq 5 ]
then
echo "BYE BYE"
exit
fi
exec $0
마지막 옵션(5)을 선택하면 종료되고, 그렇지 않으면 스크립트 자체가 다시 실행됩니다.
아니면 그냥 루프를 추가하세요:
while true;
do
dialog --menu "select" 40 40 5 1 server.hades 2 server.fire 3 server.geb 4 server.isis 5 exit 2> /tmp/a
choice=`cat /tmp/a`
if [ $choice -eq 2 ]
then
ssh 192.168.187.*
fi
[... the rest of choices ...]
if [ $choice -eq 5 ]
then
echo "BIE BIE"
break
fi
done
"while" 코드가 저에게 효과적입니다. 감사해요.