본문 바로가기

IT

윈도우즈 서버 2016 (Windows Server 2016)에서 bitsadmin와 작업스케줄러 이용해서 웹페이지를 주기적으로 다운로드해보자. 물론 로그아웃상태에서도 작동해야지.

웹어플리케이션을 운영하다보면 특정페이지를 주기적 실행하거나, 특정페이지로부터 데이터를 취득해야하는 상황이 생깁니다.

 

반복 주기를 설정, WebBrowser컨트롤로 웹페이지를 읽어오는 간단한 C# WPF(Windows Presentation Foundation) 어플리케이션을 작성해 운용중입니다. 필요에 따라 ULR과 INTERVAL만 바꿔주면 되어 편하게 잘 사용해오고 있습니다.

클라이언트 서버에 설치를 해주고, 클라이언트가 직접 관리해야 하는 상황에  생겼습니다.

그런데 서버 문제로 자주 재부팅이 생기고 그때마다 어플리케이션을 재설정해야하는 것이 너무 귀찮다고 하네요.

 

해결 방법을 아래와 같이 결정합니다.

1. CLI( Command Line Interface )로 작동하면서 특정페이지에 접속해 데이터를 취득하는 프로그램
2. 1의 프로그램의 조작을 배치파일로 작성
3. 2의 배치파일을 윈도우즈 서버 2016 (Windows Server 2016) 의 작업스케줄러(Task Scheduler)에 등록해서 주기적으로 실행

 

1. CLI( Command Line Interface )로 작동하면서 특정페이지에 접속해 데이터를 취득하는 프로그램

 

telnet

telnet  www.google.com 80 
웹페이지에 접속가능합니다만 윈도우즈 서버 2016 (Windows Server 2016)에서 기본적으로 작동 가능하도록 되어있지 않습니다.
기능의 유효화 처리를 해야합니다. 그리고 데이터 취득을 하려면 추가 처리가 필요합니다.
HTTPS의 경우는 불가능합니다. openssl 등의 별도 프로그램을 이용해야합니다.

wget

wgets  http://www.google.com -0 c:¥download¥google.html
웹페이지에 접속가능하고 데이터취득도 가능합니다만 윈도우즈 서버의 기본 프로그램이 아닙니다.
별도 설치가 필요합니다. HTTPS의 경우는 추가 처리가 필요합니다.

bitsadmin

bitsadmin /TRANSFER scheduler https://www.google.com c:¥download¥google.html
bitsadmin /TRANSFER 작업이름 원격파일명 로컬파일명
윈도우즈 10(Windows 10), 윈도우즈 서버 2012 (Windows Server 2012)부터 기본적으로 설치되어있습니다.
HTTPS의 경우도 특별한 처리없이 가능합니다.

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin-transfer

 

bitsadmin Transfer

Windows Commands topic for **bitsadmin Transfer** - Transfers one or more files.

docs.microsoft.com

bitsadmin으로 결정했습니다.

 

2. 배치파일작성

 

bitsadmin /TRANSFER scheduler https://www.google.com c:¥download¥google.html
의 내용으로 schedule.bat 파일명으로 저장합니다.

 

3. 윈도우즈 서버 2016 (Windows Server 2016) 의 작업스케줄러(Task Scheduler)에 등록

 

여기서 엄청난 고생을 했습니다.

[보안옵션>>작업실행권한유저] 를  관리자(Administrators)권한을 가진 유저로 설정하니 문제없이 작동합니다만..

로그아웃상태에서는 에러로 작동하지 않게 됩니다.

ユーザーがネットワークにログオンしていないため、要求された操作は実行されませんでした。 指定されたサービスは存在しません。(0x800704DD)

The operation being requested was not performed because the user has not logged on to the network.The specified service does not exist(0x800704DD)

유저가 네크워크에 로그인하고 있지 않아서, 요청한 조작을 실행할 수 없습니다. 지정한 서비스가 없습니다.
(0x800704DD)

여러 가지 해결방법을 찾아서 테스트를 해봤습니다만 모두 실패했습니다.

기본적으로 설정되어있던 다른 스케줄작업을 참고로 해결방법을 알아냈습니다.

 

[보안옵션>>작업실행권한유저] 를 SYSTEM 으로 설정하니 해결되었습니다.

로그아웃, 로그인상태에서 모두 문제없이 작동합니다.

 

배치파일은 동작속성에 설정합니다.

 

이제 원하는 1분 간격으로 작동하도록  트리거를 설정합니다.

재부팅이 되었을 경우에 작동되도록 "스타트업시"를 선택하고 반복간격을 1분, 유지를 무제한으로 합니다.

그런데 이상태로 설정하니 작동하지 않습니다.

"스타트업" 의 이벤트가 없었기 때문으로 생각해서 트리거를 추가합니다. 

 

매일-개시날짜-개시시간-반복간격-유지시간(매일작동하니 1일간으로 합니다.)

잘 작동합니다.

 

재부팅이 발생하면 두개의 스케줄러가 동시에 작동할 수 있지만 동시작동되어도 문제없는 상황이라 그대로 운용하고 있습니다.

나중에 추가로 설정한 시간지정의 작업은 중지시켜야겠습니다.

 

윈도우즈가 많이 편해지고 있습니다.

반응형