調試 systemd 服務
我正在嘗試創建一個守護程序來監視系統的 CPU 溫度並在時鐘頻率過高時調整時鐘頻率,但我以前從未編寫過守護程序,而且我不確定我是否做對了。
/usr/local/lib
我根據文件層次結構在 as內部的文件夾中創建了兩個文件,在throttle_daemon
其中稱為throttle_daemon
andthrottle_daemon.service
,然後我連結throttle_daemon.service
到/etc/systemd/system/throttle_daemon.service
.這是
throttle_daemon
# !/bin/bash export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus export DISPLAY=:1 CPU_TEMP=$(sensors -f | grep -Po "Tdie:\s*\+\d+" | grep -Po "\d+") # su - aaron -c "/usr/bin/notify-send 'CPU Throttle Daemon' 'CPU Temp is $CPU_TEMP'" if [ $CPU_TEMP -ge 140 ]; then su - aaron -c "notify-send 'CPU Throttle Daemon' 'Throttling CPU'" touch /var/tmp/throttle.flag for cpu in /sys/devices/system/cpu/cpu*/; do cpu=${cpu%*/} # Remove the trailing "/" echo "3200000" | sudo tee "$cpu/cpufreq/scaling_max_freq" done elif [ $CPU_TEMP -le 113 ]; then if [ -f /var/tmp/throttle.flag ]; then su - aaron -c "notify-send 'CPU Throttle Daemon' 'Un-Throttling CPU'" for cpu in /sys/devices/system/cpu/cpu*/; do cpu=${cpu%*/} # Remove the trailing "/" echo "3600000" | sudo tee "$cpu/cpufreq/scaling_max_freq" done rm /var/tmp/throttle.flag fi fi
和我的
throttle_daemon.service
[Unit] Description="CPU Throttle Service" [Service] Type=simple BusName=unix:path=/run/usr/1000/bus NotifyAccess=all Restart=always RestartSec=1s Environment=DBUS_SESSION_BUS_ADDRESS=unix:abstract=/run/user/1000/bus ExecStart=/usr/local/lib/throttle_daemon/throttle_daemon [Install] WantedBy=multi-user.target
當我從命令行執行腳本時,
watch -n 1 sudo ./throttle_daemon
它按預期工作,但在我設置服務時卻沒有。當我沒有呼叫sudo systemctl start throttle_daemon.service
任何錯誤時,它也沒有做任何事情。我希望
notify-send
每秒用我的 cpu 所處的目前溫度對我進行 ping,為什麼不是呢?
我發現我遇到的問題是我錯過了
/bin/bash
我的ExecStart=
線路所以我需要改變:
ExecStart=/usr/local/lib/throttle_daemon/throttle_daemon
到
ExecStart=/bin/bash /usr/local/lib/throttle_daemon/throttle_daemon
我也錯過了超時配置,我需要添加:
StartLimitBurst=0
到我的
[Service]
部分,在那之後,我的程序按預期執行。我也更改
WantedBy
為,graphical.target
而不是multi.user.target
因為我正在執行桌面,如果我在沒有 x 伺服器的終端上執行它,我覺得通知會崩潰,但我無法驗證。