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として設定する必要があります。

したがって、サービスを正常に実行するには2つのオプションがあります。

  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でこれらのサービスをテストし、正常に実行されました。

関連情報