このスクリプトをバックグラウンドで実行するにはどうすればよいですか?

このスクリプトをバックグラウンドで実行するにはどうすればよいですか?
#!/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

このスクリプトは、バッテリーの1つが10%未満に低下すると警告を送信します。

必要なときに通知を受け取るために、Linuxシステムのバックグラウンドでこのスクリプトをどのように実行できますか?

答え1

これを行う方法は2つあります。

コマンドの後にアンパサンドを追加します。

./battery-script.sh &

シェルからサブプロセスを作成すると、端末を閉じてもコマンドは実行され続けます。

シェルからログアウトしても何かを維持するには、コマンドの前にnohupを追加します。

nohup ./battery-script.sh

また、コマンド出力を「nohup.out」というファイルにリダイレクトします。

さらに一歩進んで起動時にこのスクリプトを実行するには、いくつかの異なるオプションがあります。

ディスプレイサーバーを起動するたびにこのスクリプトを起動するには:
x11を使用します。

x11が起動するたびにスクリプトを実行するには、この行を最後に追加します./battery-script.sh &~/.xinitrczenity警告行があることを考慮してこの場合は必要なものかもしれません)、
waylandを実行している場合はwmに依存し、swayの場合はconfig.d/autostart_applications

ディスプレイサーバーが起動する前にスクリプトを実行するには/etc/profile.d

答え2

バックグラウンドで定期的に実行するシステムタイマーデバイスを作成します。

/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

すでに述べたように、&このバックグラウンドで単にRunを使用できます。

取り外し/取り付けが必要な場合の最善の方法は、以下を使用することです。または、これにより、必要に応じてセッションを接続/分離できます。

バックグラウンドでコマンドを実行するには、次のようにしますscreen

screen -d -m -S NameOfTheSession ./script.sh

使用可能なセッションをリストします。

screen -ls

再接続:

screen -r NameOfTheSession

答え4

質問がありますか?予約されたこと働く?

関連情報