19P by xguru 6일전 | ★ favorite | 댓글 2개
  • 별도의 설정이나 데몬 없이 동작하는 경량 작업 큐 시스템을 구현하기 위한 유틸리티
  • 리눅스/MacOS 지원 - POSIX 호환 시스템에서 flock(2) 지원 시 실행 가능
  • 명령행 기반의 임시 작업 큐잉(ad-hoc queuing) 지원
    • Makefile 빌드, 파일 다운로드, 벤치마크 실행 등 순차 작업에 적합
    • nohup 대체 용도로도 활용 가능
  • 작업 순서는 ms 단위 타임스탬프 기반 동기화를 통해 엄격히 보장
    • 각 프로세스별로 TIMESTAMP.PID 를 만들고 flock(파일 락)
      ㅤ- 앞의 flock 들이 언락되면 다음 잡을 시작
    • 파일 시스템 수준에서 동기화를 수행하므로 폴링(polling) 불필요
  • nq CMDLINE... 형태로 작업을 큐에 추가하면 작업 ID 출력 후 백그라운드에서 실행
    • STDOUT/STDERR는 로그 파일로 리디렉션
    • 로그 파일의 실행 비트(+x)로 작업 상태를 시각적으로 구분 가능
  • 로그 파일명 확장자는 PID로 구성되어 작업 관리 편리함
    • 실행 전에는 nq의 PID, 실행 후에는 실제 작업 PID로 변경
    • 로그 파일을 쉘 스크립트처럼 실행해 작업 재실행 가능

at, batch, task-spooler와의 차이점

  • at
    지정된 시간에 작업을 실행하는 도구
    시스템 시계 기반으로 예약된 시각에 명령을 수행하며, 주로 일회성 예약 작업에 사용됨
  • batch
    시스템 부하(load average)가 낮을 때 작업을 실행함
    예약보다는 부하 기반 실행 제어가 목적이며, 데몬에 의해 관리됨
  • task-spooler
    큐를 관리하는 데몬을 자동으로 실행하여 순차적 또는 병렬 작업 처리 지원
    동시에 실행할 최대 작업 수를 지정할 수 있음
    터미널별로 다른 큐를 구성할 수 있으며, 각 큐의 상태를 명령으로 조회 가능함
  • nq
    데몬 없이 작동하며, 단순히 디렉터리 단위의 파일 시스템 락(flock) 으로 큐를 관리함
    시스템 부하나 예약 시각을 고려하지 않고, 단순히 작업 순서를 보장
    큐의 로그를 nqtail 로 실시간 확인 가능
    각 디렉터리가 독립적인 큐 역할을 하므로, 환경 변수 $NQDIR 로 여러 큐를 분리해 운용 가능함

코드 스타일이 너무 옛날 Sourceforge 스타일이라 제가 과거로 돌아갔나 했네요 ㅋㅋㅋ

Sourceforge 시절에 비하면 꼬꼬마 개발자입니다만 무슨 말이지? 했다가 함수 리턴형과 이름 사이에 줄바꿈 들어가는거 보고 납득해버렸네요 o.o

혹시 해당 코드 내에 다른 옛날식 코딩 스타일도 드러나보이는 게 있을까요?