Systemd: 활성화된 서비스(단순 루프)가 중단되었습니다.

Systemd: 활성화된 서비스(단순 루프)가 중단되었습니다.

컴퓨터가 로그아웃되는 것을 방지하는 간단한 flutter 스크립트가 있습니다.

# /home/fny/jiggle.sh
randint() {
  if [ -z "$1" ]; then
    echo "Usage: randint <max>"
    return 1
  fi
  expr $(tr -dc 0-9 < /dev/urandom | head -c 10) % $(expr $1 + 1)
}

while :; do
  if [ $(xprintidle) -gt 60000 ]; then # if idle longer than 1 min
    x=$(randint 500)
    y=$(randint 500)
    echo "jiggling to $x $y"
    xdotool mousemove $x $y
  fi
  sleep 300 # check every 5 minutes
done

나는 이것을 간단한 지터 서비스로 바꾸기로 결정했습니다.

# /home/fny/.config/systemd/user/jiggle.service
[Unit]
Description=jiggle

[Service]
Type=simple
ExecStart=/bin/sh /home/fny/jiggle.sh
Restart=always

[Install]
WantedBy=multi-user.target

필요한 systemctl 주문을 실행했습니다.

systemctl --user daemon-reload
systemctl --user enable jiggle
systemctl --user start jiggle

나는 내 서비스를 확인하기로 결정했습니다. 활성화되었지만 죽었습니다. 왜?

systemctl --user status jiggle

● jiggle.service - jiggle
     Loaded: loaded (/home/fny/.config/systemd/user/jiggle.service; enabled>
     Active: inactive (dead)

답변1

문제가 있는 것 같습니다. WantedBy=multi-user.target에 따르면이 답변:

--user 모드에는 multi-user.target이 없습니다. 사용자 서비스는 WantedBy=default.target으로 구성되어야 합니다.

따라서 서비스를 성공적으로 실행하는 데는 두 가지 옵션이 있습니다.

  1. 로 변경 WantedBy=default.target.:
# /home/fny/.config/systemd/user/jiggle.service
[Unit]
Description=jiggle

[Service]
Type=simple
ExecStart=/bin/sh /home/fny/jiggle.sh
Restart=always

[Install]
WantedBy=default.target
  1. systemd 서비스를 다음과 같이 사용하십시오.시스템 서비스설마사용자 서비스. 먼저 를 사용 하는 대신 jiggle servicce를 복사해야 합니다 . 사용 중인 소프트웨어가 GUI 세션에 의존하기 때문에 사용하는 것이 좋습니다 ./etc/systemd/systemsystemctl --user enable jigglesudo systemctl enable jiggleWantedBy=graphical.target
#/etc/systemd/system/jiggle.service
[Unit]
Description=jiggle

[Service]
Type=simple
ExecStart=/bin/sh /home/fny/jiggle.sh
Restart=always

[Install]
WantedBy=graphical.target

Redhat 9.0에서 이러한 서비스를 테스트했으며 성공적으로 실행되었습니다.

관련 정보