Cli 환경에서 작업을 쉽게 관리하자, Pueue!

저는 보통 cli 환경에서 별도의 커맨드 관리자를 사용하진 않았습니다. 보통 command snippet 도구인 pet, 그리고 xargsparallel를 통해 파이프라인 / 병렬 처리를 하는 형태로 많이 사용하는데, 쓸만한 커맨드 관리도구를 하나 찾아서 글로 공유해볼까 합니다.

바로 Pueue 입니다 😁

What is Pueue

pueue는 cli 기반의 쉘 커맨드 관리자입니다. 데몬 형태로 동작하며 명령어를 백그라운드 작업으로 처리하고 관리할 수 있습니다. (등록/삭제/일시정지 등)

당연히 Parallel도 지원하기 때문에 큐에 여러 작업을 넣어놓고 병렬 처리할 수도 있습니다.

https://github.com/Nukesor/pueue

  • Rust 기반의 도구입니다. 요즘 rust 기반 도구들이 눈에 잘 들어오네요.

Installation

각 OS별로 패키지 매니저를 거의 지원합니다. rust 기반이라 cargo로 설치할 수도 있습니다.

Cargo

cargo install pueue

Homebrew

brew install pueue

다른 설치 방법은 github 참고해주세요.

Daemon

처음에 이야기드렸듯이 pueue는 데몬 기반의 도구입니다. 데몬이 구동되지 않으면 명령어를 추가하거나 상태를 조회하는 등 기본적인 동작 조차 불가능합니다.

pueued 명령을 통해 데몬을 실행할 수 있습니다. -d 옵션은 그냥 cli에서 실행하면 foreground로 동작하는데, 이를 background 처리해줍니다. 자주 사용하게 되시면 각 OS의 시작 프로그램에 등록해두고 사용하시면 편합니다.

pueued -d

데몬이 실행되면 아래 경로(Mac 기준)에 config 정보가 생성됩니다. 일부 옵션 값들은 명령어로 수정할 수 있지만 config를 직접 수정하는게 좀 더 디테일한 설정이 가능합니다.

  • Linux: $HOME/.config/pueue/pueue.yml.
  • MacOs: $HOME/Library/Preferences/pueue/pueue.yml
  • Windows: %APPDATA%\Local\pueue
cat ~/Library/Preferences/pueue/pueue.yml
---
client:
  read_local_logs: true
  show_confirmation_questions: false
  show_expanded_aliases: false
  max_status_lines: ~
daemon:
  default_parallel_tasks: 1
  pause_group_on_failure: false
  pause_all_on_failure: false
  callback: ~
  groups: {}
shared:
  pueue_directory: /Users/hahwul/.local/share/pueue
  use_unix_socket: true
  unix_socket_path: /Users/hahwul/.local/share/pueue/pueue_pluto.socket
  host: localhost
  port: "6924"
  daemon_cert: /Users/hahwul/.local/share/pueue/certs/daemon.cert
  daemon_key: /Users/hahwul/.local/share/pueue/certs/daemon.key
  shared_secret_path: /Users/hahwul/.local/share/pueue/shared_secret%

Testing!

현재상태 보기

pueue status

명령어 추가

pueue add {CMD}
pueue add "subfinder -d hahwul.com"

명령어 제거

pueue remove {TASK-ID}

병렬 수행

parallel 옵션을 통해서 병렬 처리의 갯수를 변경할 수 있습니다. 기본값으론 1로 설정되어 있고, 원하는 숫자를 넣어주어 변경할 수 있습니다. 이는 그룹단위로 적용할 수도 있어서, 특정 그룹에서만 병령 처리를 수행할 수도 있습니다.

pueue parallel 5

개인적으로 병렬처리는 parallel을 사용하곤 했는데, 매니징까지 고려하면 pueue로 처리하는게 관리하기엔 더 좋을 것 같긴하네요!

cat domains | xargs -I % pueue add "subfinder -d %"