Systemd:起動時にPythonスクリプトを実行(virtualenv)


11

私は通常、次のコマンドで実行するpythonスクリプトを持っています。

(environment) python run.py

最初にこのスクリプトを実行したいと思います。(ubuntuを使用しています)これが私のサービスです。

[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

ところで、このスクリプトは実行できませんでしたが、環境内にないスクリプトは実行できました。起動時にpythonスクリプトを実行するにはどうすればよいですか(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
ログとステータスとは何ですか?
フェデリコシエラ

質問を編集しました。@FedericoSierraに感謝
ジャスミン

1
このスクリプトは、外venvをrunnigされる/usr/bin/python run.py参照、stackoverflow.com/questions/37211115/...unix.stackexchange.com/questions/278188/...
フェデリコ・シエラ

私はそれらを試しました。「python /user_sent/run.py」ではなく「python run.py」を実行する必要がある
Jasmine

1
Pythonパスは、仮想環境内のバージョンを指している必要があり、例:/path/to/your/virtualenv/bin/python
フェデリコ・シエラ

回答:


14

ユニットファイルは正しいです。venvの下でpythonファイルを実行したい場合は、次のように、envディレクトリーのpythonバイナリーを参照する必要があります。/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、2番目の例ではファイルが作成されます/home/user/space/my_file

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.