batch 파일은 윈도우에서 실행할 프로그램들을 모아놓은 스크립트입니다.
이 스크립트에는 cmd 창에서 하나하나 실행하던 command들을 모아 놓았다고 생각하시면됩니다.
일단 tcping을 사용하기위해서는
https://www.elifulkerson.com/projects/tcping.php 로 들어가서 tcping.exe 을 다운받으면 됩니다
다운받은 tcping.exe 파일을 C드라이브 -> WINDOWS -> system32 에 붙여넣어주세요.
사용하는 기능은
- if ~ else if ~ else : 조건에 따라 움직임
- goto : 만들어 놓은 메소드를 실행
- set : 변수 선언
- /p : 사용자로부터 input 받음
- taskkill /f /im 이름 : 일치하는 이름의 프로세스 죽임
- cd : 경로이동
- timeout 초 : 초 동안 대기함 ( 대기하는동안 입력하는것이 있으면 넘어감 )
- echo hi : 화면에 hi라고 표시됨 ( echo. 을 할경우 한줄 넘어감 )
- ping 아이피 : 아이피로 ping test wㅣㄴ행
- start /d 경로 명령어: 입력한 경로로 새로운 cmd창을 만든 후 명령어를 실행함
- for /f : 실행 시킨 명령어의 결과를 한줄씩 읽어옴
- findstr 문자 : netstat or tasklist 등 명령어를 사용하여 리스트를 읽어올때 입력한 문자와 일치하는 부분만 가져옴
- @echo off : 화면에 경로 표시되는 부분 지움
- tcping 아이피 포트 : 아이피의 포트로 요청을 하여 체크할 수 있음
- :: or rem : 주석
- :HI : HI 라는 메소드 , goto HI 로 실행시킬수 있음
- pause : 강제로 대기하게끔 만듬
- docker-compose up -d : docker-compose.yml 파일을 백그라운드로 실행시킴
- docker-compose down : docker-compose.yml 파일을 종료함
** 배치파일 만들때 주의사항 : 기존에 알고있던 코드 로직과 살짝 다릅니다..( 아래 예시 참조 )
위 예시를 보시면 echo 를 사용하여 콘솔에 보일 텍스트를 적어줬습니다
그리고 set /p choice= 에서 사용자의 입력을 대기합니다
사용자가 1을 입력하면 if문에 따라서 goto INIT 으로 이동을하는데 아래애 : INIT이 있는걸 볼수 있습니다.
그리고 echo END가 실행되고 pause 명령어에 따라서 콘솔창에서 계속하려면 아무 키나 누르십시오 . . . 가 표시되는 걸 볼 수 있습니다.
근데 .. 중간에 echo 123이 콘솔창에 표시안되는거 보이시죠.. 이 점을 꼭 기억하고 작성하셔야 합니다.
@ECHO off
::동작 순서 1을 입력할 경우
:: 1. 실행중인 python 모두 종료
:: 2. 실행중인 program1.exe ,program2.exe 종료
:: 3. docker-compose down
:: 4. docker-compose up
:: 5. program2.exe , program1.exe 실행
:: 6. python 2개 파일 실행
:: 주의 사항 debug에서 tcping 을 사용하려면 tcping.exe 파일을 C:\Windows\System32 에 붙여넣기 해야 가능하다.
::동작순서 2를 입력한 경우
:: 도커로 실행한 3306(mysql ) 와 3301~3308port로 tcping 을 요청한다
:: 요청 결과가 정상인 경우 1 successful, 0 failed. (0.00% fail)
:: 요청 결과가 비정상인 경우 0 successful, 1 failed. (100.00% fail)
:: 위와 같이 나오는데 1 인경우 success 를 그밖에는 fail을 표시
:: for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3306 ^| findstr success') do set result=%%a 코드를 해석하자면 delims 는 구분자 , tokens 는 구분자 기준 몇번째 값인지를 판단하다 .%%a IN 명령문 ==> 실행한 값을 %%a 에 담는다 , do => 실행 결과 , set result=%%a
echo.
echo.
:LOOP
echo Please input keyboard number ( 0= QUIT , 1 = START 2 = debug)
set /p choice=
if %choice%==1 (
goto INIT
) else if %choice%==2 (
goto DEBUG
) else (
goto END
)
::init 셋팅 ( docker-compose , python , electron 모두 종료 )
:INIT
echo init setting default
taskkill /f /im python.exe
taskkill /f /im program2.exe
taskkill /f /im program1.exe
cd C:\docker_compose
docker-compose down
timeout 5
echo init setting completed ( all system stop )
goto START
::도커 실행
:START
echo docker start
docker-compose up -d
echo docker start completed
timeout 5
echo.
goto ORDER
::operator view 실행
:ORDER
echo operator start
cd C:\dist_electron\
"program1.exe"
echo operator completed
timeout 5
echo.
goto CLIENT
::client view 실행
:CLIENT
echo client start
cd C:\dist_electron\
"program2.exe"
echo client completed
timeout 5
echo.
goto ROBOT
::robot 실행
:ROBOT
echo robot python start
start /d "C:\dockerize" python python1.py
timeout 3
start /d "C:\dockerize" python python2.py
echo robot python completed
echo.
goto FINAL
:: service debug
:DEBUG
echo.
echo service check start !!!!!!!!!!!!
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3306 ^| findstr success') do set result=%%a
if %result%==1 (
echo mysql success
) else (
echo mysql fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3330 ^| findstr success') do set result=%%a
if %result%==1 (
echo rabbitmq success
) else (
echo rabbitmq fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3331 ^| findstr success') do set result=%%a
if %result%==1 (
echo service1 success
) else (
echo service1 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3332 ^| findstr success') do set result=%%a
if %result%==1 (
echo service2 success
) else (
echo service2 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3333 ^| findstr success') do set result=%%a
if %result%==1 (
echo service3 success
) else (
echo service3 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3334 ^| findstr success') do set result=%%a
if %result%==1 (
echo service4 success
) else (
echo service4 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3335 ^| findstr success') do set result=%%a
if %result%==1 (
echo service5 success
) else (
echo service5 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3336 ^| findstr success') do set result=%%a
if %result%==1 (
echo service6 success
) else (
echo service6 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 10.0.2.29 3336 ^| findstr success') do set result=%%a
if %result%==1 (
echo service7 success
) else (
echo service7 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 10.0.2.7 3337 ^| findstr success') do set result=%%a
if %result%==1 (
echo service8 success
) else (
echo service8 fail
)
ping -n 2 10.0.2.7
echo service check end !!!!!!!!!!!!
echo.
echo.
goto FINAL
:Final
echo.
echo.
echo.
echo.
echo.
goto LOOP
:END
pause
2를 입력하여 실행한 이미지