我有一組 LED,當機器啟動和發生其他事件時,它們會啟動并變成特定的顏色。在關機/重啟時,我希望 LED 重置為默認顏色。
為了實作這一點,我啟動了一個 systemd 服務來啟動 LED 代碼,并在 python 代碼中有一個信號句柄。不幸的是,我沒有收到信號或信號沒有得到處理。
import signal
from threading import Event
stop_event = Event()
def read_led_status():
while True:
#do stuff (read from pipe and update LED status)
stop_event.wait(0.5)
def system_exit():
stop_event.set()
#set default colour
if __name__ == "__main__":
#handle kill signal
signal.signal(signal.SIGTERM, system_exit)
signal.signal(signal.SIGINT, system_exit)
signal.signal(signal.SIGHUP, system_exit)
read_led_status()
系統服務
[Unit]
Description=LED
ConditionPathExistsGlob=/dev/ttyUSB*
Before=startup.service
[Service]
Type=simple
User=admin
ExecStart=sudo python3 /led/led_start.py
KillSignal=SIGTERM
StandardOutput=syslog
StandardError=syslog
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
我在這里做錯了什么?它在 Ubuntu 上運行。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
執行的回呼signal需要兩個引數。您的實施不需要任何。正確的原型是:
def system_exit(signum, frame):
stop_event.set()
這可能會引發TypeError信號接收和執行。當您將日志輸出轉發到 syslog 時,journalctl 應該對此進行跟蹤。
使用上面的原型應該可以讓你的腳本正確地捕獲和處理SIGTERM信號(即:在 systemd 服務定義中注冊的信號)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533945.html
下一篇:可選動態庫
