Systemd 新增python啟動項 匯入包錯誤
阿新 • • 發佈:2022-05-18
1. Systemd介紹
systemd是Linux電腦作業系統之下的一套中央化系統及設定管理程式(init),包括有守護程序、程式庫以及應用軟體,由Lennart Poettering(英語:Lennart Poettering)帶頭開發。其開發目標是提供更優秀的框架以表示系統服務(英語:Service (systems architecture))間的依賴關係,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell的系統開銷(英語:Computational overhead)的效果,最終代替現在常用的System V與BSD風格init程式。
Systemd 並不是一個命令,而是一組命令,涉及到系統管理的方方面面:
2. 將Python程式加入開機啟動啟動服務
建立 /etc/systemd//system
下面的xxx.service
, 以我的為例/etc/systemd/system/autorecord.service
,寫入如下內容。
[Unit] Description=Files Service After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python3 /home/aitest/cv.py Environment="PYTHON=$PYTHONPATH:/home/test/.local/lib/python3.8/site-packages" Restart=always [Install] WantedBy=multi-user.target
- 然後重新載入 systemd
sudo systemctl daemon-reload
- 設定服務開機 自動啟動
sudo systemctl enable autorecord.service
3. 報錯內容
加入python程式需要匯入第三方包,那麼會報匯入錯誤。如下:
autorecord2.service - Files Service Loaded: loaded (/etc/systemd/system/autorecord2.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2022-05-17 22:28:58 CST; 11h ago Main PID: 2251 (code=exited, status=1/FAILURE) 5月 17 22:28:58 aitest-System-Product-Name systemd[1]: Started Files Service. 5月 17 22:28:58 aitest-System-Product-Name python3[2251]: Traceback (most recent call last): 5月 17 22:28:58 aitest-System-Product-Name python3[2251]: File "/home/aitest/cv1.py", line 7, in <modul> 5月 17 22:28:58 aitest-System-Product-Name python3[2251]: import ffmpeg_streaming 5月 17 22:28:58 aitest-System-Product-Name python3[2251]: ModuleNotFoundError: No module named 'ffmpeg_st> 5月 17 22:28:58 aitest-System-Product-Name systemd[1]: autorecord2.service: Main process exited, code=exi> 5月 17 22:28:58 aitest-System-Product-Name systemd[1]: autorecord2.service: Failed with result 'exit-code>
可以通過新增PYTHONPATH環境變數解決(上面示例已新增):
Environment="PYTHON=$PYTHONPATH:/home/test/.local/lib/python3.8/site-packages"
4. 參考資料
關於.service檔案的詳細配置見 阮一峰的網路日誌-Systemd 入門教程:命令篇