systemd: 이 서비스가 비활성화된(죽은) 이유는 무엇입니까?

systemd: 이 서비스가 비활성화된(죽은) 이유는 무엇입니까?

저는 이 간단한 Python 스크립트를 보호하고 싶습니다.

#!/usr/bin/python3
print('hello')

이것은 내 명령과 상태입니다.

root@gw-0317STLG0067 /lib/systemd/system # systemctl enable test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl daemon-reload
root@gw-0317STLG0067 /lib/systemd/system # systemctl start test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl status test.service
* test.service - My Script Service
   Loaded: loaded (/usr/lib/systemd/system/test.service; enabled; vendor preset:
   Active: inactive (dead) since Sun 2016-07-31 10:06:29 UTC; 4s ago
  Process: 20620 ExecStart=/root/test.py (code=exited, status=0/SUCCESS)
 Main PID: 20620 (code=exited, status=0/SUCCESS)

Jul 31 10:06:29 gw-0317STLG0067 systemd[1]: Started My Script Service.
Jul 31 10:06:29 gw-0317STLG0067 test.py[20620]: hello

이것은 내 서비스 스크립트입니다.

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=simple
ExecStart = /root/test.py

[Install]
WantedBy=multi-user.target

왜 죽었고 인쇄된 명세서를 보호할 때 정확히 무슨 일이 일어나야 합니까? 터미널을 폭파시켜야 할까요?

답변1

스크립트는 일반적으로 서비스로 시작하고 매우 빠르게 종료됩니다(명령이 하나뿐이고 while 루프나 재실행과 유사한 루프가 없기 때문에). 서비스가 훨씬 빠르게 종료되고 상태를 요청할 수 있습니다. 활성 상태를 확인하려면 몇 가지 루프(로그를 스팸하지 않도록 시간 초과 포함)를 추가해 보세요.

while True:
    print('hello')
    time.sleep(2)

journalctl -u test.service충분한 내용을 확인하면 systemctl을 통해 해당 내용을 종료하세요.

답변2

스크립트가 엔드포인트에 도달하고 종료되기 때문에 죽었습니다. 왜 한 print문장이 터미널을 폭파시키는 걸까요? 데몬은 일반적으로 루프에서 실행되어 종료할 시간인지 확인하고 그렇다면 종료합니다(또는 커널에서 신호를 포착하면).

답변3

Python 스크립트는 "hello world"를 인쇄한 후 Python이 스크립트 끝에 도달했음을 인식하고 실행을 종료합니다.

systemd에서 무엇을 하길 원하시나요?

다음과 같은 간단한 sh 스크립트를 사용해 보십시오.

#!/bin/sh touch /tmp/myfile$$.txt echo /tmp/myfile$$.txt tail -f /tmp/myfile$$.txt

<file>서비스 상태에서 얻을 수 있는 이름입니다.

그런 다음 터미널에서 텍스트를 스트리밍하고 echo "Hello World" >> <file>서비스를 확인하세요.

반복적으로 반복하고 인쇄하는 서비스가 터미널을 가득 채울 것입니다... 여기에서 파일을 읽고 필요한 경우 자유롭게 텍스트를 공급할 수 있습니다. 서비스가 시작될 때마다 PID인 새 파일이 생성됩니다 $$. 다음으로, /tmp/myfile$$.txt서비스를 중지할 때 이 파일을 삭제하세요.

연습을 위한 키워드: trap방법입니다 ;-)

간단하게 유지하고 학습한 다음 추가하세요. Python은 신호에도 반응할 수 있습니다. 초보자에게 더 쉽기 때문에 sh를 선택했습니다...

관련 정보