Python
Systemd:在啟動時執行 Python 腳本(virtualenv)
我有一個 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)
您的單位文件是正確的。如果你想在venv下執行任何 python 文件,你只需要像使用 venv 一樣引用venv目錄中的 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
. 這很可能表明您的腳本中存在問題。如果要調試它,您將執行以下操作:
- 執行您添加的命令,
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
。