私は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)
ユニットファイルは正しいです。 pythonファイルをvenvの下で実行したい場合は、pythonバイナリを参照するだけで_/home/user/anaconda3/bin/python
_で行ったようなvenvディレクトリ
_[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
_を作成し、2番目のファイルでは_/home/user/space/my_file
_ファイルを作成します。