이 스크립트를 백그라운드에서 실행하려면 어떻게 해야 합니까?

이 스크립트를 백그라운드에서 실행하려면 어떻게 해야 합니까?
#!/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 &

셸에서 하위 프로세스를 생성하면 터미널을 닫아도 명령이 계속 실행됩니다.

셸에서 로그아웃한 후에도 무언가를 유지하려면 명령 앞에 nohup을 추가하면 됩니다.

nohup ./battery-script.sh

또한 명령 출력을 "nohup.out"이라는 파일로 리디렉션합니다.

한 단계 더 나아가 시작 시 이 스크립트를 실행하려면 몇 가지 다른 옵션이 있습니다.

디스플레이 서버를 시작할 때마다 이 스크립트를 시작하려면:
x11을 사용하십시오.

x11이 부팅될 때마다 스크립트를 실행하려면 이 줄을 ./battery-script.sh &끝에 추가하세요 ~/.xinitrc(zenity 경고 줄이 있다는 점을 고려하면 이 경우 원하는 것일 수도 있음)
wayland를 실행하는 경우 wm 에 따라 다르며 sway의 경우 .config/ 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

질문이 있으신가요?예약 된 일들일하다?

관련 정보