明示的に停止するまで実行する必要があるユーザーレベルのサービス(Python / Java / Node JSプロセス)を設定しようとしています。非rootユーザーとしてサービスを開始/停止する必要があります。
~/.config/systemd/user/ の下にサービスファイルを作成しました。ロードしようとすると、systemctl - ユーザーデーモンの再ロード、次のエラーで失敗します。
$ systemctl --user daemon-reload
Failed to get D-Bus connection: No such file or directory
D-Busはデスクトップセッションがなければ実行されないことを知っていますが、デスクトップセッションがなければ、会社が提供する仮想マシンの1つです。 Linuxサーバーではデスクトップセッションを有効にしません。
$ ps -ef | grep systemd | grep -v grep
root 1 0 0 Jul25 ? 00:01:33 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 544 1 0 Jul25 ? 00:00:33 /usr/lib/systemd/systemd-journald
root 591 1 0 Jul25 ? 00:00:03 /usr/lib/systemd/systemd-udevd
dbus 783 1 0 Jul25 ? 00:01:21 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 857 1 0 Jul25 ? 00:00:34 /usr/lib/systemd/systemd-logind
デスクトップセッションなしでユーザーレベルのサービスを作成するには?
答え1
たった2つのコマンドで動作します。
cat << 'EOF' >> ~USERNAME/.profile
export XDG_RUNTIME_DIR=/run/user/$(id -u)
EOF
loginctl enable-linger $USERNAME