개요
systemd-run은 명령어를 systemd의 제어 하에 실행하여, 해당 명령어가 독립적인 systemd 단위(unit)로 동작하게 합니다. 이는 프로세스 그룹 관리, 리소스 제한, 로깅 통합 등 systemd의 강력한 기능을 활용할 수 있게 해줍니다.
주요 특징
- 임시 스코프 또는 서비스 단위 생성
- 프로그램의 리소스 제한 및 우선순위 설정
- 셸 세션 종료 후에도 백그라운드 실행 (서비스 단위)
- systemd 저널을 통한 통합 로깅
- 컨테이너 및 가상 머신 내에서 명령 실행
주요 옵션
systemd-run은 다양한 옵션을 통해 실행될 프로그램의 환경과 systemd 단위의 속성을 제어할 수 있습니다.
단위 유형 및 이름
실행 제어 및 환경
생성된 명령어:
명령어를 조합해 보세요.
설명:
`systemd-run` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
systemd-run 명령어를 활용한 다양한 사용 예시입니다.
기본 스코프 단위로 명령어 실행
systemd-run --scope echo "Hello from systemd-run"
간단한 명령어를 임시 스코프 단위로 실행합니다. 이 명령어는 systemd-run이 종료될 때까지 실행됩니다.
백그라운드 서비스 단위로 명령어 실행
systemd-run --service --unit=my-long-task.service sleep 300
셸 세션이 종료되어도 계속 실행되는 백그라운드 서비스를 생성합니다. `--unit`으로 서비스 이름을 지정합니다.
CPU 우선순위 및 메모리 제한 설정
systemd-run --nice=10 --property=MemoryLimit=500M stress --cpu 4
실행될 프로그램의 CPU 우선순위를 낮추고(nice=10) 메모리 사용량을 500MB로 제한합니다.
특정 작업 디렉토리에서 명령어 실행
systemd-run --working-directory=/tmp bash -c 'pwd; touch testfile.txt'
명령어를 `/tmp` 디렉토리에서 실행하도록 설정합니다.
셸을 통해 파이프라인 명령어 실행
systemd-run --shell echo "Hello" | cat
파이프(|)나 리다이렉션(>)과 같은 셸 기능을 사용하려면 `--shell` 옵션을 사용해야 합니다.
사용자 단위로 명령어 실행
systemd-run --user --scope echo "User-specific task"
현재 사용자의 systemd 인스턴스에서 단위를 생성하여 실행합니다. 시스템 전체에 영향을 주지 않습니다.
팁 & 주의사항
systemd-run 사용 시 유용한 팁과 주의할 점입니다.
스코프 vs 서비스 단위
스코프 단위(`--scope`)는 `systemd-run` 명령어가 실행되는 동안만 유효하며, 부모 프로세스에 종속적입니다. 서비스 단위(`--service`)는 `systemd-run` 명령어가 종료되어도 백그라운드에서 독립적으로 실행됩니다. 백그라운드 작업에는 `--service`를 사용하는 것이 일반적입니다.
- `--scope`: 부모 프로세스에 종속, `systemd-run` 종료 시 함께 종료
- `--service`: 독립적인 백그라운드 실행, `systemd-run` 종료 후에도 유지
단위 상태 확인 및 관리
systemd-run으로 생성된 단위의 상태는 `systemctl` 명령어를 통해 확인할 수 있습니다. 서비스 단위는 `systemctl stop` 등으로 중지할 수 있습니다.
- 상태 확인: `systemctl status <unit_name>`
- 서비스 중지: `systemctl stop <unit_name>`
- 로그 확인: `journalctl -u <unit_name>`
리소스 제한 활용
`--property` 옵션을 사용하여 CPU, 메모리, I/O 등 다양한 리소스를 제한할 수 있습니다. 이는 시스템 안정성을 높이고 특정 프로세스가 과도하게 리소스를 사용하는 것을 방지하는 데 매우 효과적입니다.
셸 기능 사용 시 `--shell`
명령어에 파이프(`|`), 리다이렉션(`>`), 백그라운드 실행(`&`) 등 셸의 특수 기능이 포함된 경우, 반드시 `--shell` 옵션을 사용하여 명령어가 셸을 통해 해석되도록 해야 합니다. 그렇지 않으면 명령어가 제대로 실행되지 않을 수 있습니다.