#!/bin/bash
# Get the battery percentage for battery 0
battery0_percent=$(cat /sys/class/power_supply/BAT0/capacity)
# Get the battery percentage for battery 1
battery1_percent=$(cat /sys/class/power_supply/BAT1/capacity)
# Threshold level
threshold=10
# Check if either battery is less than 10%
if [ "$battery0_percent" -lt "$threshold" ] || [ "$battery1_percent" -lt "$threshold" ]; then
# Display a Zenity warning
zenity --warning --text "Battery level is below 10% on one or both batteries!"
fi
当我的其中一个电池电量低于 10% 时,此脚本会发送警告。
如何在 Linux 系统上在后台运行此脚本,以便它在需要时通知我?
答案1
您有两种方法可以做到这一点:
在命令后添加 & 符号:
./battery-script.sh &
通过在 shell 中生成一个子进程,即使您关闭终端,该命令也将保持运行。
如果您希望在注销 shell 后仍保留某些内容,可以在命令前添加 nohup:
nohup ./battery-script.sh
这还将命令的输出重定向到名为“nohup.out”的文件中。
如果您想更进一步并在启动时运行此脚本,您还有一些不同的选择:
如果您希望每次启动显示服务器时都启动此脚本:
使用 x11:
将这一行添加./battery-script.sh &
到您的末尾,~/.xinitrc
以便每次启动 x11 时运行脚本(可能在这种情况下您想要什么,考虑到您有一行用于 zenity 警告)
如果您运行 wayland,这取决于您的 wm ,对于 sway 来说是 .config/sway/config.d/autostart_applications
如果您想在显示服务器启动之前运行脚本,您可以将脚本放入/etc/profile.d
答案2
创建一个 systemd 计时器单元,使其在后台定期运行。
/etc/systemd/system/my-batterywatcher.service
[Unit]
Description=my battery watcher
[Service]
Type=oneshot
ExecStart=/bin/bash /path/to/battery-watcher.sh
/etc/systemd/system/my-batterywatcher.timer
[Unit]
Description=my battery watcher
[Timer]
# run every minute
OnCalendar=*-*-* *:*:00
Unit=my-batterywatcher.service
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable my-batterywatcher.timer
答案3
答案4
有什么问题吗计划任务工作 ?