# nq - 유닉스 커맨드라인 Queue 도구

> Clean Markdown view of GeekNews topic #24282. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24282](https://news.hada.io/topic?id=24282)
- GeekNews Markdown: [https://news.hada.io/topic/24282.md](https://news.hada.io/topic/24282.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-11-11T09:31:02+09:00
- Updated: 2025-11-11T09:31:02+09:00
- Original source: [github.com/leahneukirchen](https://github.com/leahneukirchen/nq)
- Points: 20
- Comments: 2

## Summary

**데몬이나 설정 파일 없이도 작동하는 초경량 작업 큐 도구**로, 단일 디렉터리와 **파일 락(flock)** 만으로 **순차 실행과 동기화**를 보장합니다. `nq CMDLINE...` 형태로 명령을 추가하면 자동으로 백그라운드에서 실행되고, **로그 파일의 실행 비트로 상태를 직관적으로 확인**할 수 있습니다. `at`이나 `task-spooler`처럼 별도 서비스에 의존하지 않아 **빌드 스크립트, 벤치마크, 다운로드 등 ad-hoc 작업 큐잉**에 특히 유용합니다. 단순한 구조로도 충분히 질서 있는 실행 환경을 만들 수 있다는 점이, 오히려 유닉스 철학에 가장 근접해 보입니다.

## Topic Body

- 별도의 **설정이나 데몬 없이 동작하는 경량 작업 큐 시스템**을 구현하기 위한 유틸리티  
- 리눅스/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`** 로 여러 큐를 분리해 운용 가능함

## Comments



### Comment 46189

- Author: rtyu1120
- Created: 2025-11-11T13:29:45+09:00
- Points: 2

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

### Comment 46199

- Author: euphcat
- Created: 2025-11-11T19:41:40+09:00
- Points: 1
- Parent comment: 46189
- Depth: 1

Sourceforge 시절에 비하면 꼬꼬마 개발자입니다만 무슨 말이지? 했다가 함수 리턴형과 이름 사이에 줄바꿈 들어가는거 보고 납득해버렸네요 o.o  
  
혹시 해당 코드 내에 다른 옛날식 코딩 스타일도 드러나보이는 게 있을까요?
