systemd를 사용하여 Python 스크립트를 서비스로 실행해 보세요.

systemd를 사용하여 Python 스크립트를 서비스로 실행해 보세요.

방금 데비안 8 VPS를 받았고 Python 스크립트를 서비스로 실행하려고 합니다. 다음과 같이 썼습니다(모든 작업은 루트로 로그인한 SSH를 통해 수행됩니다).

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

[Service]
Type=idle
ExecStart=/usr/bin/python /web/cmcreader/test.py > /web/cmcreader/test.log 2>&1

[Install]
WantedBy=multi-user.target

나는 그것을 넣은 /lib/systemd/system 다음 chmoded했습니다.

chmod 644 /lib/systemd/system/cmcreader.service

그런 다음 다음을 사용하여 활성화하려고 합니다.

systemctl daemon-reload
systemctl enable cmcreader.service

그러나 마지막 명령은 ( enable)를 반환합니다.

Failed to execute operation: Invalid argument

내가 뭘 잘못했나요? 감사해요.

답변1

여기에서 man systemd.directives모든 systemd 지시어에 대한 문서를 찾을 수 있습니다. 여기서 ExecStart=문서의 내용을 찾을 수 있습니다 man systemd.service.

거기 문서에는 다음과 같이 나와 있습니다.

"<", "<<", "">" 및 ">>"를 사용한 리디렉션, "|"를 사용한 파이프, "&"를 사용한 백그라운드에서 프로그램 실행 및 기타 셸 구문 요소는 지원되지 않습니다.

일반적으로 필요하지도 않습니다. systemd애플리케이션은 기본적으로 이미 백그라운드에서 실행되므로 그럴 필요가 없습니다 &. 또한 출력을 자동으로 STDOUT 및 STDERR로 캡처하고 기록하므로 출력을 로그 파일로 리디렉션할 필요도 없습니다.

journalctl -u cmcreader서비스에 대한 로그를 보거나 journalctl모든 로그를 보는 데 에만 사용하십시오 .

시스템 파일의 구문이 확실하지 않은 경우 다음을 사용할 수 있습니다.

systemd-analyze verify ./path/to/your.service

또한 생성한 서비스 파일도 /etc/systemd/system. 이 /lib디렉터리는 수동이 아닌 패키지로 설치된 서비스 파일을 저장하는 데 사용됩니다.

마지막으로 enable서비스를 시작하는 대신 [Install]부팅 시 애플리케이션이 시작되도록 설정하는 부분만 실행합니다.

서비스를 시작하려면 를 사용하십시오 systemctl start your.service.

답변2

문제는 쉘 리디렉션 연산자를 사용하려고 한다는 것입니다. systemd는 쉘에서 ExecStart 라인을 암시적으로 실행하지 않습니다.

그것이 하는 일은 사용자가 지정한 프로그램( /usr/bin/python예제에서는)을 실행하는 것 뿐이며, 그 밖의 모든 것은 해당 프로그램에 대한 매개변수입니다. > /web/cmcreader/test.log 2>&1섹션 으로 인해 잘못된 인수 오류가 발생합니다.Python에 대한 인수가 잘못되었습니다.

@mark-stosberg의 답변에 따라 단순히 Journalctl을 사용하고 리디렉션의 모든 항목을 제거하는 것이 좋습니다.진짜Python 스크립트를 파일에 쓰려면 다음과 같은 몇 가지 옵션이 있습니다.

  • 실제로 로그 파일에 쓰도록 Python을 다시 작성하십시오.
  • Python 스크립트를 실행하고 출력을 리디렉션하는 bash 스크립트를 시스템에서 실행했습니다.
  • systemd가 bash를 명시적으로 실행하도록 허용ExecStart=bash -c "/usr/bin/python /web/cmcreader/test.py > /web/cmcreader/test.log 2>&1"

다시 한번 말하지만, 저는 이러한 옵션을 별로 추천하지 않습니다. 특히 마지막 옵션은 더욱 그렇습니다.

관련 정보