Windows에서 Linux 서버에서 스크립트를 정기적으로 실행하는 방법 확인

제목대로 조작을 할 수 있는지를 검증했다.


- 검증 환경-
Windows 10
virtualbox VM2대(Centos7)


이용기술/기능
이용 목적


Task Manager
Windows에서 Linux 서버 스크립트를 정기적으로 실행하기 위해

teraTermMacro
Jump 서버에 ssh 연결하여 Shellscript를 Kick하기 위해

expect
Jump 서버에서 Target 서버의 Shellscript를 Kick하기 위해

Windows bat
ttl을 직접 TaskManager로 설정하면 불편함이 있으므로 자세한 내용은 추후 설명


설정은 이미지와는 반대의 흐름으로 진행해 갑니다.
①Target 서버
· 처리하고 싶은 shellscript 설치 · 메모리의 사용률을 취득하는 처리로 한다
② Jump 서버
・expect를 인스톨, 그 기능을 이용한 shellscript 설치)
③Windows 로컬 PC
teraTermMacro (Jump 서버의 ShellScript Kick용 작성)
・Windows bat
· · TaskManager · 정기 실행 설정

1. Target 서버에 Shellscript 설치



작업 대상: 대상 서버
목적 : 움직이고 싶은 처리의 shellscript 설치 (메모리 사용률을 기록하는 처리로 한)
$ cat memory-use-rate-check.sh
#!/bin/bash
# create file memory-use.log
if [[ ! -e /var/tmp/memory-use.log ]]; then
  touch /var/tmp/memory-use.log
  chmod 755 /var/tmp/memory-use.log
fi
# memory use rate check
MemTotal=`free | grep Mem: | awk -F " " '{print$2}'`
MemoFree=`free | grep Mem: | awk -F " " '{print$4}'`

MemUse=`expr $MemTotal - $MemoFree`
MemRate=`expr $MemUse "*" 100 / $MemTotal`

echo `date +%Y-%m-%d/%H:%M` >> /var/tmp/memory-use.log
echo  "Memory Used Rate:" $MemRate"%" >> /var/tmp/memory-use.log

실행 결과: 로그 파일에 메모리 사용률을 기록하는 것과 같습니다.
[vagrant@Target tmp]$ tail -n2 memory-use.log
2020-12-10/11:31 
Memory Used Rate: 16% 

2. expect 도입, 그 기능을 사용한 shellscript 설치.



작업 대상: Jump 서버
목적: Jump 서버에서 1로 설치한 memory-use-rate-check.sh를 원격 실행.
2-1. expect 설치
[vagrant@Jump tmp]$ sudo yum install expect -y

2-2. expect 기능(대화 응답 자동화)을 사용한 shellscript를 설치.
목적: Jump → target의 memory-use-rate-check.sh를 Kick한다.
[vagrant@Jump tmp]$ cat expect-for-target.sh
#!/bin/sh
expect -c "
set timeout 2
spawn env LANG=C /usr/bin/ssh [email protected]
expect \"password:\"
send \"vagrant\n\"
expect \"~]$\"
send \"cd /var/tmp\n\"
expect \"]$\"

send \"bash ./memory-use-rate-check.sh\n\"

expect \"tmp]$\"
exit 0
"
[vagrant@Jump tmp]$

3. 로컬 WindowsPC TeratermMacro 설치



작업 대상: 로컬 WindowsPC
목적 : WindowsPC → Jump 서버에서 expect-for-target.sh를 Kick
※메모:이 ttl(teraTermMacro)는 패스워드를 암호화 보존하는 방식으로 하고 있습니다.
Expect_test> type jump-expect-kick.ttl  ← catコマンドの代わりで、typeコマンドで中身表示。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
username = 'vagrant'
hostname = '192.168.18.20'
passwdfile = 'passwd.dat'
portnum = '22'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call login
call exec
call exit
end
:login
    getpassword passwdfile username userpasswd
    msg = hostname
    strconcat msg ':portnum /ssh /auth=password /user='
    strconcat msg username
    strconcat msg ' /passwd='
    strconcat msg userpasswd
    strconcat msg inputstr
    connect msg
return
:exec
    wait '$ '
    msg = 'cd '
    strconcat msg '/var/tmp'
    sendln msg

    wait ']$ '
    msg = 'bash ./expect-for-target.sh'
    sendln msg
    pause 8
return
:exit
    wait '$ '
    msg = 'exit'
    sendln msg

4. Windows Task Manager에서 작업 일정을 설정합니다.



작업 대상: WindowsPC

1. 명령 프롬프트에서 다음을 실행
  compmgmt.msc
⇒ 컴퓨터의 관리가 기동한다.

2. 작업 스케줄러
⇒ 태스크 스케줄러 라이브러리를 엽니다.
오른쪽 마우스 오른쪽 버튼으로 클릭하여 작업 만들기를 엽니다.
3. 작업 설정


이것으로 완성.

-추신-
어드벤트 캘린더에 갑자기 참가하게되어,
서랍에 있었던 것이 최근에 한 것으로, 이런 것이 되었습니다.

좋은 웹페이지 즐겨찾기