systemd를 사용하여 데몬을 만드는 방법은 무엇입니까? [폐쇄]

systemd를 사용하여 데몬을 만드는 방법은 무엇입니까? [폐쇄]

스크립트를 데몬화하는 일반적인 접근 방식이 무엇인지 잘 모르겠습니다. 예를 들어, 온라인으로 검색했는데 컴퓨터에서 매초마다 시간을 확인하기 위해 Python 스크립트를 작성하려고 하면 systemd를 사용하여 시작한 다음 Python으로 스크립트를 작성하여 타이머로 루프를 끝내는 것밖에 생각할 수 없었습니다. .

이것은 나에게 별 의미가 없으며 방어하는 데 아주 좋은 방법도 아닙니다. 내가 systemd로 하는 일은 시작할 때 스크립트(및 모든 스크립트)를 실행하는 것뿐이므로 systemd 자체는 그다지 유용해 보이지 않습니다. 내 스크립트 데몬이 잘못된 것 같은데, systemd를 사용하여 Python 스크립트를 데몬으로 바꾸는 더 좋은 방법이 무엇인지 아십니까?

감사해요

답변1

systemd모든 것을 포함하는 것은 아닙니다. 이건 해결책이 아닐 거야모든문제가 있지만 그것은 당신에게많은문제를 해결하는 데 도움이 되는 도구입니다. 이러한 도구는 사용 방법에 따라 유용합니다.

매우 기본적인 서비스 파일을 살펴보겠습니다. check-time.service(참고 /usr/lib/systemd/system/로 참조용으로 있는 다른 서비스 파일을 사용하여 이 파일을 수동으로 생성했습니다.)

[Unit]
Description=Checks the time every second

[Service]
Type=simple
ExecStart=/usr/bin/check-time.py

서비스 파일은 다음에 속 /usr/lib/systemd/system/하거나 /etc/systemd/system/다음에 의해 생성됩니다.systemd


한 줄씩

[*]섹션 제목. 이것은 단지 함께 그룹화된 지침일 뿐입니다. 매뉴얼 페이지에서 어떤 지시문이 속하는 위치에 대한 참조를 찾을 수 있습니다 systemd.

[단위]부분

[제공하다]부분

[설치하다]부분

설명하다

단위를 설명하는 자유 형식 문자열입니다. 이는 UI에서 설명 정보와 장치 이름을 표시하는 데 사용됩니다. 설명에는 최종 사용자에게 의미 있는 이름이 포함되어야 합니다. "Apache2 웹 서버"가 좋은 예입니다. 나쁜 예는 "고성능 경량 HTTP 서버"(너무 일반적임) 또는 "Apache2"(너무 구체적이고 Apache를 모르는 사람에게는 의미가 없음)입니다.

유형

이 서비스 단위의 프로세스 시작 유형을 구성합니다. 단순, 포크, 원샷, dbus, 알림 또는 유휴 중 하나입니다.

simple로 설정하면(Type=이나 BusName=이 지정되지 않았지만 ExecStart=가 지정된 경우 기본값) ExecStart=로 구성된 프로세스가 서비스의 기본 프로세스가 될 것으로 예상됩니다. 이 모드에서 프로세스가 시스템의 다른 프로세스에 기능을 제공하는 경우 데몬이 시작되기 전에 해당 통신 채널을 설치해야 합니다(예: 소켓 활성화를 통해 systemd에 의해 소켓이 설정됨). systemd는 후속 작업을 즉시 시작합니다. 단위.

실행 시작

이 서비스를 시작할 때 실행할 매개변수가 포함된 명령입니다. 값은 아래 설명된 규칙에 따라 0개 이상의 명령줄로 분할됩니다(아래 "명령줄" 섹션 참조).


일반화하다

/usr/bin/check-time.py서비스 파일은 시작 시에만 명령을 실행합니다. 명령이 종료되면 "죽은" 것으로 간주되며 계속 실행되는 한 "활성"인 것으로 간주됩니다.

이 서비스 파일은 얼마나 유용합니까? 글쎄,별로. 그것이 하는 유일한 일은 systemctl start check-time.service일반적인 전체 경로 대신에 Python 스크립트를 실행할 수 있게 해주는 것이지만 유용한 다른 옵션도 많이 있습니다.


유용한 옵션

수배자부팅 시 서비스를 시작하려면 WantedBy=기본 대상을 설정하세요.

재시작systemd"항상" 또는 "실패 시"와 같이 서비스를 자동으로 다시 시작해야 하는 시기를 결정합니다 .

하드웨어 사용 제한, 프로세스 실행에 사용할 사용자, 환경 변수 설정, 종속성 설정 등 말 그대로 수백 가지의 다른 옵션이 있습니다. systemd단지 내용을 래핑할 수 있기 때문만이 아니라 제공되는 모든 추가 기능에 유용합니다.

답변2

당신이 무엇을 요구하는지 잘 모르겠습니다. Systemd는 초기화 시스템이므로 시작 시 프로세스를 실행하는 역할을 합니다.

편집: 시스템에서 실행 중인 서비스를 나열하려면 다음을 수행하십시오.

systemctl list-units --type service

관련 정보