나는 보통이 명령으로 그것을 실행하는 파이썬 스크립트를 가지고있다 :
(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)
답변
단위 파일이 정확합니다. 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
입니다. 이것은 아마도 스크립트 내의 문제를 나타냅니다.
이를 디버깅하려면 다음을 수행하십시오.
ExecStart=
스크립트에서 문제가 발생한 경우 루트 아래 에서 정확히 추가 한 명령을 실행하여 확인하십시오.- 오류없이 실행되면으로 저널을보십시오
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
.