Category Archives: 개발

회사 프로젝트가 진행이 안되는 이유

하루에 200km 이동이 가능한 배달차를 1대 보유한 회사가 있다. 그리고 이 회사에는 두가지 프로젝트가 있다.

  • 프로젝트 A: 100km 떨어진 곳에 물건을 배달하고 돌아오기.
  • 프로젝트 B: 매일 몇군데 10km 떨어진 곳에 물건을 배달하고 돌아오기.

프로젝트 B는 매일 해야한다. 만약 프로젝트 B로 100km를 사용하고 100km의 이동 리소스가 남는다고 해도 프로젝트 A를 할 수는 없다.

  • 사장: “200km 이동가능한 배달차니까 100km 왕복이면 200km인데 프로젝트 A가 왜 진행이 안되지?”
  • 직원: “매일 10km 배달하는 프로젝트 B 때문에 어렵습니다.”
  • 사장: “그럼 하루에 한 50km씩만 이동하면 4일 후에 프로젝트 A가 끝나지 않을까?”
  • 직원: “…”

생각해보니 회사를 하루에 50km씩 이동시키면 되기는 하겠다. 다만 프로젝트 B는 첫날 60km, 둘째날 110km가 되겠지.

Ubuntu 14.04 에서 PHP로 Daemon 만들기

우분투에서 PHP로 데몬(Daemon)을 만드는 방법은 어렵지 않다.

예제를 통해 직접 데몬을 만들어 보자. 데몬을 만들려면 2개의 파일이 필요한데 데몬을 동작시키는(시작과 종료) 파일과 데몬으로 동작할 파일이다.

 

예제를 위한 디렉토리 준비 및 파일구조 계획

예제 디렉토리를 만든다.

예제를 진행하면서 아래와 같은 파일구조를 가져갈 것이다.

  • 데몬을 동작시키는 파일: /home/my/php_daemon/pug
  • 데몬으로 동작할 파일: /home/my/php_daemon/bin/pug
  • Log 파일: /home/my/php_daemon/log/pug.log
  • PID 파일: /home/my/php_daemon/log/pug/pug.pid

 

데몬을 동작시키는 파일 만들기

데몬을 동작시키는 파일은 우분투에서 뼈대 파일(/etc/init.d/skeleton)을 제공해준다. 단순히 뼈대 파일을 복사해서 환경에 맞게 편집하면 된다.

다른 데몬들과 마찬가지로 service 명령으로 데몬을 실행하기 위해서는 /etc/init.d 디렉토리에 데몬을 동작시키는 파일이 있어야 한다. 소스코드를 관리하기 쉽도록 파일을 복사하는 대신에 심볼릭 링크를 사용하겠다.

여기까지 해서 데몬을 동작시키는 파일은 준비가 되었다.

 

데몬으로 동작할 파일 만들기

파일이 데몬으로써 동작하기 위해서는 프로세스 생성하거나 PID 파일을 만드는 뻔하고 복잡한 일이 요구되는데 다행히 이런 것들이 미리 구현되어 있는 System_Daemon 라이브러리가 있다.

Composer를 이용해 System_Daemon 라이브러리를 설치한다.

이제 System_Daemon 라이브러리를 이용해서 데몬으로 동작할 파일을 만들어보자.

잊지말고 실행 권한도 부여하자.

System_Daemon 옵션중 appPidLocation 의 값이 /home/my/php_daemon/pug 파일의 PIDFILE 값과 동일해야 함에 유의하자.

위 appPidLocation 값은 반드시 …/pug/pug.pid 이어야 한다. …/pug.pid 또는 …/other/pug.pid 로 하면 데몬을 실행할때 아래와 같은 오류가 발생한다.

err: Since version 0.6.3, the pidfile needs to be in it’s own subdirectory like: %s/pug/pug.pid

 

데몬 실행하기

다른 데몬들을 실행하는 것과 동일하게 실행하면 된다.

 

System_Daemon 추가 정보

위의 데몬 예제에서는 System_Daemon::isDying() 메소드를 이용해서 데몬의 무한루프로 동작을 탈출시켰다. 그런데 어떤 상황에서는 System_Daemon::isDying() 메소드만으로는 데몬의 무한루프 동작을 탈출하기 어려울 때가 있다. 이때는 System_Daemon::setSigHandler() 메소드를 활용하면 된다.

PHP 코드 시작 첫줄의 declare(ticks = 1) 가 없으면 무한반복 상태에서 System_Daemon::setSigHandler() 메소드에 등록한 함수가 호출되지 않는다. declare(ticks = 1) 대해서는 PHP 메뉴얼을 살펴보자.

 

문제에 대한 대처

데몬을 만들다가 발생하는 문제는 대부분 아래와 같으므로 알 수 없는 문제가 발생하면 하나씩 체크해보자.

  • 데몬 관련 파일의 실행 권한
  • 로그나 PID 파일의 쓰기 권한
  • 디렉토리나 파일 경로 오류

 

참고자료

 

워드프레스 티스토리/텍스트큐브 이사도구 2.5

Kihwan님이 보내주신 피드백을 바탕으로 섬네일 관련 문제를 해결했습니다.

2.5에서 수정된 사항

  • 미디어 라이브러리 및 대표이미지 선택시 섬네일 관련 문제 해결
  • 첫번째 첨부 이미지를 대표이미지로 선택

WordPress TTXML Impoter 플러그인 페이지에서 최신버전을 확인하고 받으세요. ^^