Linux에서 사용자 정의 Systemd 서비스를 만드는 단계별 가이드

Linux에서 사용자 정의 Systemd 서비스를 만드는 단계별 가이드

Linux에서 사용자 정의 Systemd 서비스 마스터링: 포괄적인 가이드

Systemd는 다양한 Linux 배포판에서 강력하고 역동적인 init 시스템으로 자리 잡고 있습니다.프로그램 실행, 리소스 관리 및 전반적인 시스템 제어를 용이하게 합니다.이 가이드는 Ubuntu에서 개인화된 서비스 단위를 만들어 Systemd의 모든 잠재력을 활용할 수 있도록 해줍니다.

Systemd 서비스 단위 이해

서비스 유닛은 핵심적으로 특정 애플리케이션을 실행하는 데 필요한 구성을 설명하는 표준화된 파일입니다.세션 동안 프로그램, 실행 지시문 및 Systemd의 액세스 프레임워크에 대한 세부 정보에 대한 메타데이터를 캡슐화합니다.

Systemd 지원 환경의 모든 데몬은 서비스 파일에 의해 관리됩니다.예를 들어, OpenSSH는 Debian 및 Ubuntu 시스템에서 작동을 지시하기 위해 ssh.service위치한 단위를 사용하여 작동합니다./etc/systemd/system/

OpenSSH 서비스 장치를 보여주는 터미널입니다.

일반적으로 서비스 단위 파일은 Unit, Service, 의 세 가지 기본 섹션으로 구성됩니다 Install.Unit섹션은 애플리케이션의 메타데이터와 종속성을 나타내는 반면, Service섹션은 위치와 실행 방법을 지정합니다.결론적으로, Install섹션은 Systemd에서 애플리케이션을 시작할 수 있는 시기를 명확히 합니다.

시스템 수준 사용자 정의 서비스 생성

사용자 지정 서비스는 높은 권한이 필요한 작업을 자동화하거나 Systemd 타이머를 활용하는 데 매우 중요합니다.일반적인 예로는 Minecraft 서버가 시스템을 다시 시작한 후 안정적으로 시작되도록 하는 것이 있습니다.

사용자 정의 시스템 수준 서비스를 만드는 단계

  • Systemd 단위 파일 만들기: 홈 디렉토리에 새 단위 파일을 만드는 것으로 시작합니다.
  • nano ~/my-system-app.service
  • 구성 삽입: 새 단위 파일 내부에 다음 템플릿을 추가합니다.이는 유효한 기본 구성으로 사용됩니다.
  • [Unit] Description=My First Service After=network.target [Service] Type=simple ExecStart=/path/to/bin Restart=always [Install] WantedBy=multi-user.target
  • 서비스 사용자 지정: 서비스와 관련된 세부 정보 로 Description및 필드를 조정하세요.ExecStart
  • 파일 이동: 저장하고 서비스 디렉토리로 전송하세요.
  • sudo cp ~/my-system-app.service /etc/systemd/system/
  • Systemd Daemon 다시 로드: 서비스를 다시 로드하기 위한 명령을 실행합니다.
  • sudo systemctl daemon-reload
  • 서비스 시작: 사용자 정의 시스템 수준 서비스를 시작합니다.
  • sudo systemctl start my-system-app.service
  • 기능 확인: 서비스가 작동하는지 확인하세요.
  • systemctl status my-system-app.service
사용자 지정 서비스가 제대로 실행되는 것을 보여주는 터미널입니다.

사용자 수준 사용자 정의 서비스 설정

Systemd는 Systemd-user를 사용하여 루트 없는 서비스를 생성할 수 있도록 지원하여 루트가 아닌 사용자도 개인 애플리케이션을 효과적으로 처리할 수 있게 하며, 루트 접근을 최소화하여 보안을 향상시킵니다.

사용자 수준 사용자 정의 서비스를 만드는 방법:

  • 단위 파일 설정: 홈 디렉토리에 새 단위 파일을 만듭니다.
  • nano ~/my-user-app.service
  • 기본 구성 삽입: 단위 파일에서 다음 프레임워크를 사용하세요.
  • [Unit] Description=My First User Service After=graphical-session.target [Service] Type=simple ExecStart=/path/to/bin [Install] WantedBy=default.target
  • ExecStart 조정: 지정된 경로가 ExecStart사용자 계정에서 액세스할 수 있는지 확인하세요.
  • 사용자의 로컬 Systemd 디렉토리 생성:
  • mkdir -p ~/.config/systemd/user/
  • 단위 파일 복사: 사용자 지정 서비스 단위를 로컬 디렉토리로 전송합니다.
  • cp ~/my-user-app.service ~/.config/systemd/user/
  • 사용자에 대한 Systemd 다시 로드: Systemd가 사용자 디렉토리의 변경 사항을 확인하는지 확인합니다.
  • systemctl daemon-reload --user
  • 서비스 상태 확인: 사용자 서비스가 올바르게 인식되는지 확인하세요.
  • systemctl --user status my-user-app.service
systemctl에서 인식된 사용자 정의 사용자 서비스를 보여주는 터미널입니다.

사용자 정의 Systemd 서비스 최적화

Systemd의 유연성 덕분에 사용자는 서비스 매개변수와 동작을 세밀하게 조정할 수 있습니다.

환경 변수 통합

환경 변수는 구성 파일을 수정하지 않고도 Linux 프로그램에 추가적인 컨텍스트를 제공하며, Systemd는 이를 서비스 단위에 통합하는 것을 지원합니다.

  • 서비스 비활성화: 수정하려는 서비스를 비활성화하여 시작합니다.
  • systemctl --user disable --now my-user-app.service
  • 서비스 파일 편집: 원하는 텍스트 편집기에서 단위 파일을 엽니다.
  • sudo nano ~/.config/systemd/user/my-user-app.service
  • 서비스 섹션 수정: 섹션 아래에 [Service]다음을 포함합니다.
  • Environment="VARIABLE_NAME=VALUE"
  • 데몬 다시 로드: Systemd 데몬을 저장하고 다시 로드하여 변경 사항을 적용합니다.
  • systemctl --user daemon-reload
  • 서비스 다시 시작: 새 환경 변수를 사용하여 다시 시작합니다.
  • systemctl --user start my-user-app.service
수정된 환경 변수가 있는 서비스를 보여주는 터미널.

리소스 사용 제한

Systemd는 공정한 이용을 보장하기 위해 서비스의 리소스 사용을 규제하는 메커니즘을 제공합니다.

  • 대상 서비스 비활성화: 먼저 완전히 비활성화합니다.
  • sudo systemctl disable my-system-app.service
  • 단위 파일 편집: 다음을 사용하여 서비스 파일을 엽니다.
  • sudo nano /etc/systemd/system/my-system-app.service
  • 리소스 제한 추가: 예를 들어 메모리를 제한하려면 다음과 같이 합니다.
  • MemoryHigh=SIZE
  • 단위 변경 사항 다시 로드: 새 설정을 다시 로드합니다.
  • sudo systemctl daemon-reload
  • 리소스 사용 모니터링: 다음을 통해 서비스 성능을 추적하세요.
  • systemd-cgtop
systemd-cgtop의 출력을 보여주는 터미널.

결론

Systemd를 탐색하면 Linux에서 프로세스 관리에 대한 상당한 잠재력이 열립니다.작업 자동화에서 리소스 효율성 관리에 이르기까지 사용자 지정 서비스를 만들면 시스템의 상호 운용성과 성능을 크게 향상시킬 수 있습니다. Systemd와 광범위한 기능을 더 깊이 파고들고, 더 미묘한 이해를 위해 Sudo에 비해 Run0의 비교 이점을 탐색하는 것을 고려하세요.

이미지 출처: Mikhail Fesenko via Unsplash.모든 수정 및 스크린샷은 Ramces Red가 제공했습니다.

자주 묻는 질문

1.기존 init 시스템보다 Systemd 서비스를 사용하는 이점은 무엇입니까?

Systemd는 병렬 서비스 시작, 종속성 관리 및 서비스 처리에 대한 통합된 접근 방식을 제공하여 기존 init 시스템에 비해 전반적인 성능과 안정성을 향상시킵니다.

2.하나의 애플리케이션에 여러 서비스를 생성할 수 있나요?

네, 다양한 구성으로 시작하거나 특정 조건에서 시작하는 등 다양한 측면을 관리하기 위해 단일 애플리케이션에 대해 여러 서비스 단위를 만들 수 있습니다.

3. Systemd 서비스에서 발생하는 문제를 어떻게 해결합니까?

journalctl -u my-service-name.service로그를 확인하고 systemctl status my-service-name.service현재 상태 및 오류 메시지를 조사하는 등 의 명령을 사용하여 Systemd 서비스의 문제를 해결할 수 있습니다.

출처 및 이미지

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다