라이믹스/매뉴얼/Crontab 설정 방법

상위 문서: 라이믹스/매뉴얼

개요[편집 / 원본 편집]

라이믹스에서 cron을 사용하는 경우는 크게 두 가지이다.

  1. 정리 스크립트 — 쌓인 불필요한 데이터를 정기적으로 지운다. 하루 한 번 정도 실행한다.
  2. 비동기 작업(Queue) 실행 — 메일 발송이나 푸시 알림을 백그라운드에서 처리한다. 1분 간격 등 짧은 주기로 실행한다.

공식 매뉴얼의 Crontab 설정 방법 문서는 앞쪽만 다루므로,[1] 이 문서에서는 두 가지를 함께 정리한다.

윈도우 서버는 지원하지 않는다.[1]

정리 스크립트[편집 / 원본 편집]

사이트를 운영하다 보면 탈퇴한 회원의 정보, 삭제된 사진의 섬네일, 확인하지 않은 알림 같은 불필요한 데이터가 쌓인다. 이런 데이터를 정기적으로 지우면 디스크 공간을 아끼고 서버를 쾌적하게 유지할 수 있다.[1]

라이믹스는 이를 위한 PHP-CLI 스크립트를 제공한다. 다량의 데이터를 지우는 데 시간이 오래 걸릴 수 있어 웹에서는 실행할 수 없다.[1]

실행 방법[편집 / 원본 편집]

스크립트는 각 모듈의 scripts 폴더에 있으며, 라이믹스 설치 경로에서 다음 형식으로 실행한다.[1]

php index.php 모듈명.스크립트명 [변수]

예를 들어 60일 이상 지난 알림을 지우려면 다음과 같이 실행한다.

php index.php ncenterlite.cleanNotifications 60

스크립트 목록[편집 / 원본 편집]

스크립트 하는 일 기본값
file.cleanGarbageFiles 파일만 올리고 글 작성을 취소하여 남은 파일, 대용량 업로드가 중단되어 남은 파일 등을 지운다 10일
file.cleanThumbnails 오래된 섬네일 이미지를 지운다 90일
module.cleanMiscLogs 메일·SMS 발송 로그, 푸시 발송 로그, 스팸필터 로그 등 여러 모듈이 만드는 잡다한 로그를 일괄 삭제한다 30일
ncenterlite.cleanNotifications 오래된 알림을 지운다
file.cleanEmptyDirs 첨부파일·회원정보·섬네일 폴더에 남은 빈 폴더를 지운다

file.cleanThumbnails는 주의해야 한다. 오래된 글의 섬네일도 보여줘야 하는 웹진형 게시판을 운영한다면 쓰지 말자. 지운 섬네일을 다시 만드는 데 더 많은 서버 자원이 든다.[1]

file.cleanGarbageFiles도 주의가 필요하다. 일부 서드파티 자료는 파일 업로드 후 문서에 정상적으로 연결하지 않고 isvalid=N 상태로 방치하는데, 이런 파일이 삭제될 수 있다.[1]

crontab 설정 예제[편집 / 원본 편집]

여러 스크립트를 동시에 실행하면 과부하가 걸릴 수 있으므로, 방문자가 적은 시간대에 시간차를 두고 실행하자. 매일 정해진 시각에 백업한다면 백업 직전에 정리하는 것이 편하다.[1]

빈 폴더를 지우는 스크립트를 맨 마지막에 실행하면 효과적이다. 앞선 스크립트들이 파일을 지우면서 빈 폴더가 생기기 때문이다.

05 05 * * * php /설치경로/index.php file.cleanGarbageFiles >> /설치경로/files/cron.log 2>&1
10 05 * * * php /설치경로/index.php file.cleanThumbnails >> /설치경로/files/cron.log 2>&1
15 05 * * * php /설치경로/index.php module.cleanMiscLogs >> /설치경로/files/cron.log 2>&1
15 05 * * * php /설치경로/index.php ncenterlite.cleanNotifications >> /설치경로/files/cron.log 2>&1
20 05 * * * php /설치경로/index.php file.cleanEmptyDirs >> /설치경로/files/cron.log 2>&1

비동기 작업 실행[편집 / 원본 편집]

라이믹스는 메일 발송, 푸시 알림처럼 시간이 오래 걸리거나 외부 서비스와 연동하는 작업을 비동기로 처리하여 응답 속도를 개선하는 기능을 제공한다. 관리자 화면의 비동기 작업 항목에서 설정한다.

※ 관리자 화면은 이 기능을 실험적인 기능으로 안내하고 있다. 호스팅 환경에 따라서는 안정적으로 작동하지 않을 수도 있다.

이 기능을 켜기만 해서는 동작하지 않는다. 외부 스케줄러가 일정한 주기로 처리 스크립트를 호출해 주어야 한다.

관리자 설정 항목[편집 / 원본 편집]

항목 설명
비동기 작업 사용 체크를 해제하면 더 이상 작업을 접수하지 않는다
비동기 드라이버 작업을 관리할 방법. Redis 등 일부 드라이버는 서버에 해당 기능이 설치되어 있어야 한다
호출 간격 스크립트를 호출할 주기(분). 모든 작업은 호출 간격과 무관하게 실시간으로 처리되지만, 간격이 짧으면 장애 발생 시 빠르게 복구된다
프로세스 갯수 여러 프로세스를 동시에 실행해 처리 용량을 늘린다. 고성능 단독 서버가 아니라면 1을 유지하는 것이 권장된다
웹크론 오류 표시 에러 로그를 확인하기 어려운 환경에서 웹크론 오류를 화면에 표시한다

crontab으로 실행[편집 / 원본 편집]

처리 스크립트는 common/scripts/cron.php이며, CLI에서는 common.cron이라는 이름으로 호출한다.

* * * * * php /설치경로/index.php common.cron

호출 간격을 1분으로 설정했다면 위와 같이 매분 실행한다. 스크립트는 설정한 호출 간격만큼 실행된 뒤 스스로 종료되므로, 앞선 실행이 끝나기 전에 다음 실행이 겹치지 않는다.

systemd timer로 실행[편집 / 원본 편집]

crontab 대신 systemd timer를 사용해도 된다. 관리자 화면의 안내도 crontab, systemd timer, 웹크론을 나란히 제시하고 있다.

웹크론으로 실행[편집 / 원본 편집]

SSH를 쓸 수 없는 웹호스팅 환경에서는 외부 웹크론 서비스로 URL을 호출하는 방법을 쓸 수 있다. 정리 스크립트와 달리 이 스크립트는 네트워크를 통한 직접 호출을 지원한다.

https://사이트주소/common/scripts/cron.php?key=발급된키

key 값은 관리자 화면의 비동기 작업 설정에서 확인할 수 있다. 키가 맞지 않으면 403 Forbidden과 함께 Invalid key가 반환된다. 정상적으로 처리되면 OK가 출력된다.

웹크론을 쓸 때는 다음을 유의해야 한다.

  • 호출 간격이 php.ini의 실행 시간 제한(max_execution_time)을 넘지 않도록 해야 한다. 서버의 현재 값은 관리자 화면에 표시된다.
  • 웹크론으로 호출한 경우에는 멀티프로세싱을 지원하지 않는다. 프로세스 갯수를 2 이상으로 설정해도 하나만 실행된다.

실행 계정[편집 / 원본 편집]

평소 웹서버를 실행하는 계정으로 crontab을 설정해야 한다. 보통 apache, nginx, www-data 등이다.[1]

다른 계정이나 root로 실행하면 나중에 사이트에서 퍼미션 문제가 생기거나 캐시 파일이 꼬일 수 있다. 어느 계정을 써야 할지 모르겠다면 files/config/config.php 파일이나 files/cache 폴더의 소유자를 확인하자.[1]

ls -l files/config/config.php

로그 확인[편집 / 원본 편집]

위 예제를 따르면 실행 결과가 files/cron.log에 기록된다. crontab 설정 후 며칠간은 이 파일을 확인하며 정상 작동 여부를 점검하자.[1]

tail -f /설치경로/files/cron.log

로그 파일이 무한정 커지지 않도록 logrotate를 함께 설정해 두면 좋다.

그 밖의 스크립트[편집 / 원본 편집]

common/scripts 폴더에는 예전 이름의 스크립트 파일들(clean_old_thumbnails.php 등)도 남아 있다. 공식 매뉴얼의 일부 설명은 아직 이 이름을 사용한다.

또한 module.updateAllModules 스크립트가 있는데, 이는 모든 모듈의 업데이트를 수행하는 것으로 정기 실행용이 아니다. cron에 등록하지 말자.

같이 보기[편집 / 원본 편집]

출처[편집 / 원본 편집]

이 문서의 정리 스크립트 부분은 라이믹스 공식 매뉴얼의 Crontab 설정 방법 문서를 바탕으로 작성되었다. 공식 매뉴얼은 CC BY-SA 4.0 라이선스로 배포된다.[2]

비동기 작업 부분은 라이믹스 코어 소스(common/scripts/cron.php, common/framework/Queue.php, modules/admin/lang/ko.php)를 확인하여 작성하였다.

각주[편집 / 원본 편집]

  1. 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 Crontab 설정 방법 - 라이믹스 매뉴얼
  2. rhymix-docs 저장소 README에 "이 매뉴얼은 CC-BY-SA 4.0 라이선스에 따라 배포됩니다"라고 명시되어 있다.

최근 바뀜

더 보기