Systemd : 시작할 때 Python 스크립트 실행 (virtualenv)


11

나는 보통이 명령으로 그것을 실행하는 파이썬 스크립트를 가지고있다 :

(environment) python run.py

시작할 때이 스크립트를 실행하고 싶습니다. (우분투를 사용하고 있습니다) 다음은 내 서비스입니다.

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

[Service]
Type=idle

ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py

[Install]
WantedBy=multi-user.target

BTW, 나는이 스크립트를 실행할 수 없지만 환경 내부가 아닌 스크립트를 실행할 수 있습니다. 시작할 때 어떻게 파이썬 스크립트를 실행할 수 있습니까 (virtualenv)?

sudo systemctl status user_sent
● user_sent.service - Mail Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited,   status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)

1
로그와 상태는 무엇입니까?
Federico Sierra

내 질문을 편집했습니다. 많은 감사 @FedericoSierra
Jasmine

1
스크립트는 venv 외부에서 실행됩니다 /usr/bin/python run.py. stackoverflow.com/questions/37211115/…unix.stackexchange.com/questions/278188/…
Federico Sierra

나는 그들을 시도했다. "python /user_sent/run.py"가 아닌 "python run.py"를 실행해야합니다
Jasmine

1
파이썬 경로는 가상 환경 내에서 버전을 가리켜 야, 예/path/to/your/virtualenv/bin/python
페데리코 시에라

답변:


14

단위 파일이 정확합니다. venv 에서 파이썬 파일을 실행 하려면 venv 디렉토리 에서 파이썬 바이너리를 참조하면 됩니다./home/user/anaconda3/bin/python

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

[Service]
Type=idle

ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py

[Install]
WantedBy=multi-user.target

눈에 띄는 것은 장치가 고장난 이유 code=exited, status=200/CHDIR입니다. 이것은 아마도 스크립트 내의 문제를 나타냅니다.

이를 디버깅하려면 다음을 수행하십시오.

  1. ExecStart=스크립트에서 문제가 발생한 경우 루트 아래 에서 정확히 추가 한 명령을 실행하여 확인하십시오.
  2. 오류없이 실행되면으로 저널을보십시오 journalctl -u <unit_name>. 유닛 관련 문제에 대한 자세한 정보를 제공해야합니다.

포스트 스크립트

다음 [Service]옵션 모두 작동합니다.

ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py

또는

WorkingDirectory=/home/user/space
ExecStart=/home/user/anaconda3/bin/python run.py

유일한 차이점은 스크립트의 상대 호출이 다른 디렉토리에서 실행된다는 것입니다. 따라서 스크립트에 줄이 포함되어 있으면 open("my_file", "w")첫 번째 예에서는 파일을 만들고 /my_file두 번째 예는 파일을 만듭니다 /home/user/space/my_file.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.