문제는 systemd
두 번째 원격 시스템에서 서비스를 시작할 수 있습니까? 입니다.
상상하다:
애플리케이션 3X 이름은 app1 app2 app3 머신 2X 이름으로 부르겠습니다. ms1 및 ms2라고 부르겠습니다.
----MS1---------MS2
----app1--------app3
----app2------------
비슷한 서비스를 만들었습니다.
응용 서비스
[Unit]
Description=Application
[Service]
# The dummy program will exit
Type=oneshot
# Execute a dummy program
ExecStart=/bin/true
# This service shall be considered active after start
RemainAfterExit=yes
[Install]
# Components of this application should be started at boot time
WantedBy=multi-user.target
신청 1.서비스
[Unit]
Description=Application Component 1
# When systemd stops or restarts the app.service, the action is propagated to this unit
PartOf=app.service
# Start this unit after the app.service start
After=app.service
[Service]
# Pretend that the component is running
ExecStart=/bin/sleep infinity
# Restart the service on non-zero exit code when terminated by a signal other than SIGHUP, SIGINT, SIGTERM or SIGPIPE
Restart=on-failure
[Install]
# This unit should start when app.service is starting
WantedBy=app.service
신청 2. 서비스
[Unit]
Description=Application Component 2
PartOf=app.service
After=app.service
[Service]
ExecStart=/bin/sleep infinity
Restart=on-failure
[Install]
WantedBy=app.service
신청 3. 서비스
[Unit]
Description=Application Component 3
PartOf=app.service
After=app.service
# This unit should start after the app-component2 started
After=app-component2.service
[Service]
ExecStart=/bin/sleep infinity
Restart=on-failure
[Install]
WantedBy=app.service
app3.service
두 번째 컴퓨터를 초기화 하려면 어떻게 해야 합니까 ? 가능합니까 systemd
, 아니면 스크립트가 필요합니까?
답변1
~에 따르면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
.
답변2
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
[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
설치하십시오 . [email protected]
원격 컴퓨터에서 듣기 시작
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