본문 바로가기

과목/Linux 리눅스

crontab으로 정해진 시간에 php 파일 실행하기

목표 우분투 리눅스 클라우드 서버에서 crontab을 사용하여 php 파일을 실행시킨다. php파일에는 mysql에 접근하는 코드를 작성한다.


linux 콘솔 창에서 crontab -e 명령 입력하면 아래와 같이 주석이 쭉 나오고 # m h dom mon dow command 주석이 마지막으로 나온다.

m은 분, minute (0-59)

h는 시,hour (0-23)

dom은 날짜, day of month (1-31)

mon은 달, month (1-12)

dow는 요일, day of week (0-7) 0일요일 1월요일...6토요일 7일요일


아래에 0 12 * * *의 의미는 0분, 12시, 모든 날짜, 모든 달, 모든 요일마다 실행하겠다는 의미이다.

만약 1분마다 계속 실행하게 하려면 * * * * *이다.


명령 하나마다 한 줄에 입력해야 한다.

 0 12 * * * php /var/insertDate.php는 매일 12시가 되면 /var 폴더에 있는 insertDate.php라는 php 파일을 실행시키겠다는 의미다.

 



include를 사용하여 외부 파일을 참조한다. 

session.php 파일에는 단순히 <?php session_start()?> 함수만 있다. 세션 시작은 위해서.


dbConnect.php 파일엔 다음과 같은 코드가 있다. mysql DB 연동을 위해서.

1
2
3
4
5
6
7
8
<?php
    header("Access-Control-Allow-Origin: *");
    $dbConnect = mysqli_connect('localhost','id','pw','dbname');
    if(mysqli_connect_error()){
        echo "연결 실패: ". mysqli_connect_error();
    }
    mysqli_select_db($dbConnect"dbname");
?>
cs


매일매일 날짜를 추가해주기 위해서 mysql DB에는 이미 테이블이 만들어져 있다.

id는 auto_increment. date date 이런 식이다.


오늘 날짜를 dates라는 테이블에 삽입하려면 insert into dates(date) value(curdate());

$dbConnect->query()를 이용해 원하는 sql query문을 실행한다.


그리고 최신 날짜에 해당하는 id를 가져오려면 가장 마지막에 있는 날짜를 택하면 되므로 단순하게 date_id가 max인 것을 고른다.


다른 곳에서 날짜 id에 관한 데이터를 필요로 하므로 $_SESSION으로 출력된 date_id값을 세션에 저장한다.




오늘 날짜는 2018.09.08이다. 테스트 하느라 여러번 삽입되었다.


위와 같은 설정을 마치면 하루가 지날 때마다 dates테이블에 새로운 record가 삽입된다.


PS 사실 리눅스 서버의 표준 시간이 좀 이상했다. 그래서

crontab -e 입력 후 TZ=KST를 0 12 * * * ... 명령어 바로 윗 줄에 추가해줬다. 잘 동작한다.