서비스 관리를 위한 스크립트 만들기

서비스 관리를 위한 스크립트 만들기

한 서버에서 다른 서버로 서비스를 배포, 시작 및 중지하는 데 필요한 스크립트를 작성하려면 여러분의 지원이 필요합니다. 서비스는 속성 파일이 포함된 jar입니다.

더 많은 옵션이 포함된 메뉴 스크립트를 만들겠습니다.

나는 다음과 같이 만들었습니다.

#!/bin/bash
PS3='Please enter your choice: '
options=("Start" "Stop" "Deploy" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Start Shaw")
echo "you chose choice 1"
;;
"Stop Shaw")
echo "you chose choice 2"
;;
"Check Shaw Status")
echo "you chose choice 3"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done

선택 항목을 다양한 기능에 연결하는 방법을 모르겠습니다.

시작 기능:

나는 이것을 생각했다 :

function start_service ( )
{
ssh $1 'nohup /data/jdk1.8.0_151/bin/java -jar -Xmx1024M /data/apps/file.jar &'
}
echo "Starting servers"
for serv_name in $( cat /data/server_list/list.txt )
do start_service ${serv_name} &
echo $! > pid.file &
sleep 5
done

여기서 list.txt는 이 서비스를 시작하는 데 필요한 모든 서버가 포함된 파일입니다. 문제는 각 서버에 pid.file 파일을 생성해야 하고 첫 번째 서버에서 이를 시작하면 나열된 각 서버에 대해 첫 번째 서버에 프로세스가 생성되지 않고 대신 각 서버에 대해 프로세스가 생성된다는 것입니다.

멈추다:

pid.file에서 시작하여 file.pid를 읽고 프로세스를 중지하는 명령이 필요합니다. 예: kill $(cat pid.file)

배포:

여기에 문제가 있습니다. 폴더를 생성하고 해당 폴더에 jar 파일 또는 속성 파일을 넣고 싶습니다. 이 기능을 선택하면 파일이 정의된 경로의 모든 서버에 배포됩니다. jar 파일: /pathtofile/apps/file.jar 파일 속성: /pathtofile /conf/file.properties

PS: 보안 문제를 해결하기 위해 systemd를 사용할 수 없습니다. 서버에 대한 루트 액세스 권한이 없습니다.

답변1

rootSystemD는 프로세스(즉, 시스템 수준) 에만 적용되는 것이 아닙니다 . SystemD 사용자 서비스( systemctl --user ...)를 생성할 수 있습니다.

#!/bin/bash
PS3='Please enter your choice: '
options=("Start" "Stop" "Deploy" "Quit")
select opt in "${options[@]}"; do
        case $opt in
                "Start")
                        echo "Starting servers"
                        for serv_name in $( cat /data/server_list/list.txt ); do
                                start_service "$serv_name" &
                                echo $! > "$serv_name".pid & # PID of the background subshell
                                sleep 5
                        done
                ;;
                "Stop")
                        echo "you chose choice 2"
                ;;
                "Deploy")
                        echo "you chose choice 3"
                ;;
                "Quit")
                        break
                ;;
                *) echo "invalid option $REPLY";;
        esac
done

관련 정보