윈도우 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 > 프로그램' 카테고리의 다른 글
[python] pymysql (0) | 2025.03.14 |
---|---|
python - format / php - sprintf (0) | 2025.03.14 |
[scraping - php 스크래핑] 1. 상품정보 수집에 대한 정보 DB화 (2) | 2019.01.17 |
[scraping - php 스크래핑] 시작하기 (0) | 2019.01.17 |
ASP 함수 정리 (0) | 2018.12.06 |