본문 바로가기

IT/프로그램

[php] 윈도우 스케줄러 cmd schtasks 사용

윈도우 PHP 서버 기준입니다. (XAMPP 사용중)

 

서비스를 하면서 사용자 pc를 일일이 손봐주기가 버거운 관계로..

 

schtasks 으로 스케줄러를 제어를 하게 되었습니다...

 

세부적인 명령은 많지만 제 기준 필요한 부분만 간단히 정리했습니다.

 

 

cmd 명령하기 - 여러가지가 있지만 exec() 사용

 

exec([명령어], [출력값 변수], [결과 변수]);

 - 출력값, 결과 변수는 없어도 상관없음

 

간단한 예로

<?php
exec('ipconfig', $result);
print_r($result);
?>

ipconfig  에 대한 출력값이 나옵니다.

 

하지만 바로 명령을 내리는것 보다 .bat 파일로 하는게 더 효율적입니다.

 

ex) c:\test.bat (깃허브 push 를 할경우)

echo off
git status
git add .
git commit -m "xxxxx"
git push -u origin master

이렇게 배치파일로 만들어서 사용합니다.

 => echo off : 명령라인을 숨김니다. (출력값만 보입니다. 사용자가 볼 필요는 없기에..)

      cmd명령을 사용할땐 cmd창이 호출이 됩니다.

      시스템 권한으로 하면 되지만.. 일괄 패치로 진행을 할거라 시스템까지는....  ㅠㅠ

 

 

스케줄러를 이용한 schtasks

 - 좋은 방법이야 많지만 현재 제가 사용하고 있는 방식입니다.

 - 스케줄러 등록시 바로 run 해버리면 되지만 앞뒤 실행중인 부분까지 체크해야 하기에 아래처럼 사용합니다.

 

/tn : 스케줄러 이름

/sc once : 한번만 실행

/st : 실행시간

 

<?php
exec('schtasks /create /tn "test" /tr c:\test.bat /sc once /st 00:00'); //스케줄러 만들기
sleep(1);
exec('schtasks /run /tn "test" '); //바로실행
sleep(1);
exec('schtasks /delete /tn "test" /f'); //스케줄러 삭제
?>

중간에 sleep은 안주셔도 될거 같은데.. 급한게 아니기에..... 잠깐 텀을 줍니다.

 

 

분당 스케줄러 등록하기

/tn : 스케줄러 이름

/sc minute : 분단위 반복

/mo 3 : 3분마다

 

/st : 시작시간 => date("H:i") -> 현재 시간 몇분뒤로 계산해서 넣으시면 됩니다.

 - 초까지는 안되네요...

/sd : 날짜 => date("Y/m/d") -> 이것도 계산해서.. 혹 연말에 대비해서..

<?php
exec('schtasks /delete /tn "test" /f');	//이미 실행중인 스케줄러 삭제
sleep(1);
exec('schtasks /create /tn "test" /tr c:\test.bat /sc minute /mo 3 /st {시작시간} /sd {날짜} ');	//스케줄러 등록
?>

 

/sc <ScheduleType>

예약 유형 설 명
MINUTE, HOURLY,
DAILY, WEEKLY,
MONTHLY
시간 단위 지정
ONCE 지정된 날짜와 시간에서 한번만 작업
ONSTART 시스템이 시작 될 때마다 매번 실행. 날짜나 다음 번에 시스템 시작시 작업을 지정 할수 있음. 
ONLOGON 사용자(모든 사용자) 로그인 할 때 마다 작업 실행, 다음 사용자 로그인시 작업을 실행 또는 날짜를 지정
ONIDLE 시스템이 지정된 기간 동안 유휴 상태일 때마다 작업 실행, 날짜를 지정, 또는 다음에 시스템이 유휴 상태일 때 실행

 

'IT > 프로그램' 카테고리의 다른 글

[scraping - php 스크래핑] 1. 상품정보 수집에 대한 정보 DB화  (2) 2019.01.17
[scraping - php 스크래핑] 시작하기  (0) 2019.01.17
ASP 함수 정리  (0) 2018.12.06
php 함수정리  (0) 2018.12.02
이미지 롤링  (0) 2018.11.28