Как запускать приложения на второй удаленной машине с помощью systemd

У меня это произошло после обновления RHEL 7.4 -> 7.5. Сокет Dbus перемещен в /run/dbus/system_bus_socket. Несмотря на то, что systemd явно указывает на /run/dbus/system_bus_socket, он все еще хочет подключиться через /var/run/dbus/system_bus_socket:

.
[root@ipsystem]# systemctl restart systemd-logind.service
Error getting authority: Error initializing authority: Could not connect: Connection refused (g-io-error-quark, 39)

Обратите внимание, что он подключается к сокету /run/dbus/:

[root@ip-10-0-254-241 system]# lsof -p `pidof systemd`|grep socket
systemd   1 root   14u     unix 0xffff9385a4507c00      0t0      54528 socket
systemd   1 root   19u     unix 0xffff9385c8411400      0t0      69828 /run/dbus/system_bus_socket
systemd   1 root   21u     unix 0xffff9385c8412800      0t0      78276 socket
systemd   1 root   52u     unix 0xffff9384f1b3bc00      0t0      13426 /run/lvm/lvmpolld.socket
systemd   1 root   71u     unix 0xffff9384f40de000      0t0       9631 /run/systemd/journal/socket
systemd   1 root   75u     unix 0xffff9384f1b28c00      0t0      12918 /run/lvm/lvmetad.socket
[root@ipsystem]# mv /var/run/dbus/system_bus_socket /var/run/dbus/system_bus_socket.old
[root@ipsystem]# systemctl restart dbus NetworkManager
Error getting authority: Error initializing authority: Could not connect: No such file or directory (g-io-error-quark, 1)
[root@ipsystem]# ls -l /var/run/dbus/system_bus_socket
ls: cannot access /var/run/dbus/system_bus_socket: No such file or directory

Явно все еще ищет сокет /var/run/dbus/system _bus _.

Связь /var/run/dbus/system_bus_socketс/run/dbus/system_bus_socket:

[root@ipsystem]# ln -s /run/dbus/system_bus_socket /var/run/dbus/system_bus_socket```

Теперь работает как положено:

[root@ipsystem]# systemctl restart dbus systemd-logind 
[root@ipsystem]# systemctl status dbus systemd-logind
● dbus.service - D-Bus System Message Bus
   Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2018-04-16 15:07:38 UTC; 9s ago
     Docs: man:dbus-daemon(1)
 Main PID: 18217 (dbus-daemon)
   CGroup: /system.slice/dbus.service
           └─18217 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
Apr 16 15:07:38 systemd[1]: Started D-Bus System Message Bus.
Apr 16 15:07:38 systemd[1]: Starting D-Bus System Message Bus...
● systemd-logind.service - Login Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-logind.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2018-04-16 15:07:38 UTC; 9s ago
     Docs: man:systemd-logind.service(8)
           man:logind.conf(5)
           http://www.freedesktop.org/wiki/Software/systemd/logind
           http://www.freedesktop.org/wiki/Software/systemd/multiseat
 Main PID: 18220 (systemd-logind)
   Status: "Processing requests..."
   CGroup: /system.slice/systemd-logind.service
           └─18220 /usr/lib/systemd/systemd-logind

Файлы конфигурации:

[root@ip]# cat /usr/lib/systemd/system/sockets.target.wants/dbus.socket
[Unit]
Description=D-Bus System Message Bus Socket
[Socket]
ListenStream=/run/dbus/system_bus_socket
[root@ip]# cat /usr/lib/systemd/system/dbus.socket
[Unit]
Description=D-Bus System Message Bus Socket
[Socket]
ListenStream=/run/dbus/system_bus_socket
1
04.03.2020, 17:11
2 ответа

Согласноhttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/system_administrators_guide/index#sect-Managing_Services_with_systemd-Remote(обновленной ссылке ), вы действительно можете это сделать, но я никогда этого не пробовал. Он основан на ssh, и я не знаю, как использовать его в файле :(, но ваш app3.serviceможет выполнить что-то вроде ssh -i /path/to/ssh_key user@host systemctl start real_service.

0
28.04.2021, 23:21

Я достигаю этого, используя локальную службу, которая запускает netcatдля запуска удаленной службы через сокет.

local.service:

[Unit]
Description=Local control of a remote service

[Service]
Type=simple
ExecStart=/bin/nc remote-machine remote-port
StandardOutput=journal
StandardError=journal
SuccessExitStatus=1

remote.socket:

[Unit]
Description=Socket for allowing remote control of our service

[Socket]
ListenStream=listen-port
Accept=yes

[Install]
WantedBy=sockets.target

remote@.service:

[Unit]
Description=A service running on another machine
Requires=remote.socket

[Service]
Type=simple
ExecStart=/path/to/application
StandardInput=socket
StandardOutput=socket
StandardError=socket

Установите local.serviceна основной компьютер. Установите remote.socketи remote@.serviceна машину, на которую вы переносите эту работу. На удаленной машине начните прослушивание с помощью

systemctl start remote.socket

Проверьте это на своем локальном компьютере (замените remote-ipиremote-port):

netcat remote-machine-ip  remote-port

Вы должны увидеть запущенный удаленный процесс. stdoutи stderrдолжны появиться в вашем терминале. Если приложение принимает stdin, вы также можете использовать его здесь. Убейте netcatлокально, и вы должны увидеть остановку удаленной службы. Как только вы будете довольны этим, включите сокет, чтобы он начал слушать после загрузки, запустив это на удаленной машине:

systemctl enable remote.socket

Наконец, соедините все вместе с

systemctl start local.sevice

Ваша удаленная служба должна быть запущена

systemctl stop local.servce

Ваша удаленная служба должна быть остановлена.

Теперь вы можете добавить любыеRequires=WantedBy=PartOf=отношения, которые вы хотите local.serviceдля запуска удаленной службы.

0
28.04.2021, 23:21

Теги

Похожие вопросы