systemd로 시작할 때 Linux 프로그램을 실행하는 방법

게시 됨: 2022-01-29
랩톱의 양식화된 터미널 창입니다.
Fatmawati Achmad Zaenuri/Shutterstock

부팅 시 Linux 프로그램을 시작해야 합니까? systemd 소프트웨어는 systemd가 있는 모든 Linux 배포판에서 수행할 수 있는 방법을 제공합니다. 이는 Ubuntu를 포함하여 오늘날 대부분입니다. 통합 서비스를 만드는 과정을 안내하고 저널과도 통신합니다.

이 튜토리얼은 시스템을 시작할 때 시작되는 시스템 서비스를 설정하는 방법을 보여줍니다. 로그인할 때 그래픽 프로그램을 실행하려면 데스크탑의 시작 관리자를 대신 사용하십시오.

시작 시 프로그램 실행

컴퓨터에 설치한 소프트웨어가 Linux 시작 프로세스에 연결되어 컴퓨터가 시작될 때마다 프로그램이 자동으로 실행되는 경우가 있습니다. 자신의 프로그램과 스크립트 또는 실제로 컴퓨터에 있는 다른 프로그램을 사용하여 이와 동일한 동작을 쉽게 수행할 수 있습니다.

시작 시 실행되는 프로그램은 시스템 및 서비스 관리자인 systemd 에 의해 제어됩니다. systemd 는 시작 시 실행되는 첫 번째 프로세스입니다. 항상 프로세스 ID(PID) 1이 있습니다. 컴퓨터에서 실행 중인 다른 모든 프로세스는 systemd 에 의해 시작되거나 systemd 가 이미 시작한 프로세스에 의해 시작됩니다.

백그라운드에서 실행되는 프로그램을 데몬 또는 서비스라고 합니다. systemd 끝의 "d"는 데몬을 나타냅니다. 이 문서에서는 예제 서비스를 만듭니다. 모든 확인란을 선택하려면 서비스가 다음과 같아야 합니다.

  • 서비스 유닛 파일을 통해 systemd 와 통합
  • 시작 시 시작됨
  • systemd 의 제어 인터페이스인 systemctl 을 사용하여 제어 가능
  • 저널에 글을 쓸 수 있는

서비스 프로그램 생성

systemd 가 실행될 프로그램이 필요합니다. "htg.sh"라는 간단한 스크립트를 만들 것입니다. 이 튜토리얼은 Gedit 텍스트 편집기를 사용하지만 원하는 텍스트 편집기를 사용할 수 있습니다.

 터치 ht.sh
 gedit htg.sh 

광고

gedit 편집기가 열립니다. 다음 텍스트를 복사하여 편집기에 붙여넣습니다.

 #!/bin/bash

echo "htg.service: ## 시작 ##" | systemd-cat -p 정보

동안 :
하다
TIMESTAMP=$(날짜 '+%Y-%m-%d %H:%M:%S')
echo "htg.service: 타임스탬프 ${TIMESTAMP}" | systemd-cat -p 정보
수면 60
완료

변경 사항을 저장하고 편집기를 닫습니다.

gedit 편집기의 htg.sh 스크립트

스크립트는 많은 작업을 수행하지 않지만 주목할 가치가 있는 몇 가지 사항이 있습니다.

  • 두 개의 echo 라인은 프로그램에서 출력을 가져와 저널로 보내는 프로그램인 systemd-cat 을 통해 연결됩니다. 저널에 등록된 항목이 우선 적용됩니다. -p (우선순위) 옵션을 사용하여 메시지가 정보(정보) 전용임을 나타냅니다. 중요한 오류나 경고가 아닙니다.
  • 끝없는 while 루프가 있습니다.
  • TIMESTAMP 변수는 현재 날짜 및 시간으로 설정됩니다. 이것은 메시지로 형식화되어 저널에 전송됩니다.
  • 그런 다음 스크립트는 60초 동안 절전 모드로 전환됩니다.
  • 60초 후에 루프가 반복됩니다. 따라서 이 스크립트는 1분에 한 번씩 타임스탬프가 찍힌 메시지를 저널에 씁니다.

스크립트를 /usr/local/bin 디렉토리에 복사합니다.

 sudo cp htg.sh /usr/local/bin 

그리고 우리는 그것을 실행 가능하게 만들어야 합니다:

 sudo chmod +x /usr/local/bin/htg.sh 

서비스 단위 파일 생성

systemd 에 의해 시작되는 각 프로그램에는 서비스 단위 파일이라는 정의 파일이 있습니다. 이것은 systemd 가 프로그램을 찾아 실행하고 일부 동작을 정의하는 데 사용할 수 있는 특정 속성을 보유합니다.

새 서비스에 대한 단위 파일을 만들어야 하지만 기존 단위 파일에 새 서비스에 부여하려는 이름이 없는지 확인하는 것이 좋습니다.

 sudo systemctl 목록 단위 파일 --유형 서비스 

가나다순으로 정렬된 단위 파일 목록을 스크롤하여 사용하려는 이름이 사용되지 않았는지 확인할 수 있습니다.

광고

우리 서비스는 "ht.service"라고 부를 것입니다. 해당 이름을 가진 단위 파일이 없으므로 계속 진행하여 단위 파일을 만들 수 있습니다.

 sudo gedit /etc/systemd/system/htg.service 

gedit 편집기가 열립니다. 다음 텍스트를 복사하여 편집기에 붙여넣습니다.

 [단위]
Description=Geek 서비스 방법 안내

원함=network.target
After=syslog.target network-online.target

[서비스]
유형=단순
ExecStart=/usr/local/bin/htg.sh
재시작=실패 시
RestartSec=10
KillMode=프로세스

[설치]
WantedBy=다중 사용자.대상

변경 사항을 저장하고 편집기를 닫습니다.

gedit 편집기의 htg.service 단위 파일

항목에는 다음과 같은 의미가 있습니다. 일반적인 항목입니다. 우리의 간단한 서비스에는 실제로 대부분이 필요하지 않지만 포함하면 설명할 수 있습니다.

  • 설명: 서비스에 대한 텍스트 설명입니다.
  • 원함: 우리 서비스는 서비스가 시작되기 전에 네트워크가 가동되기를 원하지만 요구하지는 않습니다.
  • 이후: 이 서비스가 성공적으로 시작된 후 시작되어야 하는 장치 이름 목록(아직 실행 중이 아닌 경우).
  • 유형: 단순합니다. systemdExecStart 에 의해 지정된 프로세스가 분기되는 즉시 이 서비스가 시작된 것으로 간주합니다.
  • ExecStart: 시작해야 하는 프로세스의 경로입니다.
  • 다시 시작: 서비스를 다시 시작해야 하는 시기와 여부입니다. 우리는 그것을 "on-failure"로 설정했습니다.
  • RestartSec: 서비스를 다시 시작하기 전에 대기하는 시간입니다. 이 값은 초 단위입니다.
  • KillMode: systemctl 에 서비스 중지를 요청할 경우 systemd 가 프로세스를 종료하는 방법을 정의합니다. 우리는 이것을 "처리"로 설정했습니다. 이로 인해 systemd 는 주 프로세스에서만 SIGTERM 신호를 사용합니다. 우리 서비스가 간단한 스크립트가 아닌 간단한 프로그램이라면 생성된 프로세스도 종료되도록 이것을 "혼합"으로 설정합니다.
  • WantedBy: "multi-user.target"으로 설정되어 있습니다. 즉, 그래픽 사용자 인터페이스를 사용할 수 있는지 여부에 관계없이 시스템이 여러 사용자가 로그인할 수 있는 상태에 있는 한 서비스가 시작되어야 합니다.

단위 파일은 실행 가능하지 않아도 되지만 단위 파일에 대한 권한은 편집할 수 있는 사람을 제한해야 합니다. 악의적이거나 장난꾸러기 사용자가 단위 파일을 변경하여 다른 프로그램을 완전히 실행하는 것을 원하지 않습니다.

이 명령은 소유자에게 읽기 및 쓰기 권한과 그룹에 대한 읽기 권한을 부여합니다. 다른 사람들은 권한이 없습니다.

 sudo chmod 640 /etc/systemd/system/htg.service 

서비스가 아직 실행되지 않더라도 systemctl 이 우리 단위 파일의 구문을 검사하도록 할 수 있습니다. 모든 오류가 보고됩니다. (사실 ".service" 부분은 대부분의 명령어에서 선택 사항입니다.)

 systemctl 상태 htg.service 

광고

오류가 강조 표시되지 않습니다. 이는 단위 파일이 구문적으로 정확함을 의미합니다.

서비스 시작

새 단위 파일을 추가하거나 기존 파일을 편집할 때 단위 파일 정의를 다시 로드하도록 systemd 에 알려야 합니다.

 sudo systemctl 데몬 다시 로드

시작할 때 서비스를 시작하려면 다음을 활성화 해야 합니다.

 sudo systemctl enable htg

서비스를 활성화하면 서비스가 시작되지 않고 부팅 시 시작되도록 설정됩니다. 지금 서비스를 시작하려면 start 옵션과 함께 systemctl 을 사용해야 합니다.

 sudo systemctl 시작 htg 

서비스 확인

서비스를 수동으로 시작한 후 또는 컴퓨터를 재부팅한 후 서비스가 올바르게 실행되고 있는지 확인할 수 있습니다.

 sudo systemctl 상태 htg.service 

서비스 상태가 표시됩니다.

터미널 widnow에서 htg.service의 상태

  • 녹색 점은 서비스가 원활하게 실행되고 있음을 의미합니다.
  • 서비스 이름은 "htg.service"이고 긴 설명은 단위 파일에서 제공한 것입니다.
  • "/etc/systemd/system/htg.service"가 로드된 단위 파일이 표시됩니다.
  • 서비스가 활성화되어 있으며 서비스가 시작된 시간이 표시됩니다.
  • PID는 7762입니다.
  • 서비스와 관련된 두 가지 작업이 있습니다.
  • 서비스에서 총 928Kibbyte의 메모리를 사용하고 있습니다.
  • 제어 그룹에는 "htg.sh" 스크립트와 "htg.sh"에 의해 시작된 sleep 명령이 포함됩니다. 대부분의 경우 sleep 명령이 이 서비스에 대한 작업을 수행합니다.

또한 이 서비스에서 생성된 최근 10개의 저널 항목도 표시됩니다. 놀랍게도 그들은 모두 1분 간격입니다.

서비스 중지 및 비활성화

서비스를 중지해야 하는 경우 다음 명령으로 중지할 수 있습니다.

 sudo systemctl stop htg.service 

광고

이렇게 하면 서비스가 중지되지만 다음에 컴퓨터를 재부팅할 때 서비스가 다시 시작되는 것은 아닙니다. 시작 시 서비스 시작을 중지하려면 서비스를 비활성화 해야 합니다.

 sudo systemctl htg.service 비활성화 

서비스가 실행 중인 경우 이 명령은 서비스를 중지하지 않습니다. 단순히 다음 재부팅 시 서비스를 시작하지 않도록 systemd 에 지시합니다.

서비스를 중지하고 시작 시 시작되지 않도록 하려면 두 명령을 모두 사용하십시오.

서비스 팁

서비스로 시작하기 전에 프로그램이 예상대로 실행되는지 확인하십시오.

관련: 개발자 및 열광자를 위한 최고의 Linux 노트북