1

Хорошо, у меня есть 2 машины linux, машина A и машина B. Машина A - это сервер, на котором работает аудиосервер icecast. Machine B - это настольный компьютер в студии, на котором работает BUTT(Broadcast Using This Tool) - приложение x11, которое отправляет звук обратно на машину A.

Попка на машине B иногда дает сбой (фактически любое приложение, которое мы пробовали, и на окнах тоже со временем вылетает), убивая поток. Однако я обнаружил, что я настраиваю Icecast для запуска полосы, когда источник отключается. У меня есть авторизация с закрытым ключом, работающая для ssh между A и B. У меня есть скрипт, который, если я буду работать на B (через обычный интерактивный ssh), будет повторно прикладывать усилия. Чего я не знаю, так это как написать скрипт на А, чтобы он запускал тот скрипт, который у меня есть на Б.

Я попробовал это:

#!/bin/bash
ssh username_placeholder@B '/home/username_placeholder/broadcast.sh'
exit

работает от А. Но это, кажется, поддерживает ssh. Все, что я хочу сделать, это запустить его и повесить трубку. broadcast.sh выглядит так:

#!/bin/bash
killall butt
env DISPLAY=:0 butt&
exit

Это потому, что приклад работает только в графическом режиме. и мы все равно хотим время от времени видеть графический интерфейс в студии. Итак, как мне сделать так, чтобы он запускал этот сценарий и зависал, или есть еще лучший способ сделать это на A, не пытаясь вызвать сценарий на B. Я хочу, чтобы он убил приклад, если он все еще работает, а затем запустил его (запомните это по-прежнему должен отображаться на B, а не на A. А - это компьютер, который может знать, когда источник на B зависает.)

Компьютер A работает на сервере Ubuntu, а на компьютере B работает Linux Mint на случай, если кому-то это захочется.

2 ответа2

0

Вам следует рассмотреть возможность использования команды screen, она позволит вам делать то, что вы хотите, с дополнительным преимуществом возможности повторного подключения к оболочке в любой момент времени.

SSH УДАЛИТЬ ХОЗЯИН

machine_a:> ssh machine_b

НАЧНИТЕ НОВУЮ ОБОЛОЧКУ С ЭКРАНОМ

machine_b:> screen
machine_b:> run your script here

ОТКЛЮЧЕНИЕ ОТ ЭКРАНА

( Press Ctrl-a then ctrl-d to disconnect from the screen )

ВЫХОД ИЗ СЕРВЕРНОЙ ОБОЛОЧКИ

machine_b:> exit
machine_a:> 

ВХОД В СЕРВЕР (на более поздний срок)

machine_a:>ssh machine_b

Перечислите все экраны, которые существуют для вашего пользователя

screen -list  (to show a list of all screen sessions that exist).

eg.    
username@machine_b:~/> screen -list
There are screens on:
        30264.pts-5.machine_b  (Detached)
2 Sockets in /var/run/uscreens/S-username.

ОТКЛЮЧИТЬСЯ К ОТКРЫТОМУ ЭКРАНУ

machine_b:> screen -dr 30264

На этом этапе вы можете видеть ваш скрипт / команду / оболочку в точности так, как вы ее оставили. Даже если команда, которую вы запустили, была приложением xwindows с дисплеем, настроенным на отображение удаленного сервера.

Чтобы создать удаленный экран с вашим скриптом, работающим так же, как вы пытаетесь сделать, используя только ssh, попробуйте это:

ssh -t username_placeholder@B 'screen -d -m /home/username_placeholder/broadcast.sh'
0

Вы должны запустить свой широковещательный скрипт с компьютера A с опцией '-f' ssh:

#!/bin/sh
ssh -f username_placeholder@B /home/username_placeholder/broadcast.sh

это автоматически заставит 'broadcast.sh' перейти на задний план.

Сам скрипт 'broadcast.sh' должен выглядеть так:

#!/bin/sh
killall butt
DISPLAY=:0 butt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .