시스템 서비스가 Python 프로젝트를 시작할 수 없습니다.

시스템 서비스가 Python 프로젝트를 시작할 수 없습니다.

저는 Python으로 작성된 프로젝트를 서버에서 실행하려고 합니다. 다음 서비스 파일을 만들었습니다.

[Unit]
Description=My bot service
After=multi-user.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3.10 /home/path/to/bot.py
[Install]
WantedBy=multi-user.target

하지만 이 코드는 작동하지 않습니다. 서비스 상태를 확인하면 다음이 반환됩니다.

● test.service - My bot service
     Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2022-10-21 08:16:07 UTC; 15s ago
    Process: 156695 ExecStart=/usr/bin/python3.10 /home/path/to/bot.>
   Main PID: 156695 (code=exited, status=1/FAILURE)

Oct 21 08:16:07 instance-1 systemd[1]: test.service: Scheduled restart job, restart coun>
Oct 21 08:16:07 instance-1 systemd[1]: Stopped My bot service.
Oct 21 08:16:07 instance-1 systemd[1]: names.service: Start request repeated too quickly.
Oct 21 08:16:07 instance-1 systemd[1]: test.service: Failed with result 'exit-code'.
Oct 21 08:16:07 instance-1 systemd[1]: Failed to start My bot service.

로봇( /usr/bin/python3.10 /home/path/to/bot.py)을 직접 실행하면 작동합니다.

간단한 Python 스크립트를 서비스로 실행할 때도 작동합니다.

프로젝트 내부에서 문제의 원인이 무엇인지 이해하지 못합니다. 구성 파일에 매개변수를 추가해도 WorkingDirectory아무 것도 변경되지 않았습니다.

답변1

bot.py돌아오는 중 1.

어떤 조건에서 이 코드를 사용하여 종료할 수 있는지 확인하려면 코드를 확인해야 합니다.

가장 먼저 할 일은 삭제입니다 Restart=always. 스크립트가 실패한 다음 다시 시작한 다음 다시 시작하고 시도를 중지하는 것을 볼 수 있습니다. 처음에 실패하면 앞으로도 성공하지 못할 가능성이 높습니다. 따라서 모든 것이 제대로 작동할 때까지 이 줄은 거의 필요하지 않습니다. 그것이 하는 일은 출력을 오염시키고 개발 중에 혼란을 야기하는 것뿐입니다. 이것이 없으면 systemctl status마지막 몇 줄만 얻을 수 있습니다 stdout.

다음으로 내가 한 일은 서비스를 시작하고 로그를 확인하는 것이었습니다.

$ sudo systemctl start test.service
$ journalctl -u test.service --since "5 minutes ago"

이는 무슨 일이 일어나고 있는지에 대한 stdout 또는 stderr 단서를 제공할 수 있습니다. 특이한 흔적이 있는지 구체적으로 확인하세요.

로그에 출력이 없으면 python버퍼가 플러시되기 전에 종료되었기 때문일 수 있습니다. 사용된 python옵션 은 -u출력이 버퍼링되지 않도록 보장합니다.

ExecStart=/usr/bin/python3.10 -u /home/path/to/bot.py

--user마지막으로, 이 로봇이 창을 생성하고 GUI가 있는 경우 특별한 단계(버스 또는 설정 DISPLAY=환경 에서 실행)를 수행해야 합니다 . GUI가 필요하면 더 많은 정보를 제공할 수 있습니다. 이것은 사람들이 "나는 실행할 수 있지만 시스템에서는 실행할 수 없습니다"라는 문제에 직면하는 매우 일반적인 이유입니다.

관련 정보