LINUX.ORG.RU

Запуск ХОТЬ ЧЕГО-ТО на удалённой машине по SSH

 ,


0

1

Всем привет! Задача такая, есть проект на FreePascal, кросс-компиляция настроена на ARM-Linux, после компиляции вызывается скрипт upload.sh

#!/bin/sh

clear
PROJECT_PATH=$(dirname $(dirname $(dirname `readlink -e "$0"`)))/bin/;
TARGET_IP=192.168.201.26
EXEC_FILE=pdd
REMOTE_DIR=/root

# Убиваем процессы   
if [ $(ssh root@$TARGET_IP pgrep $EXEC_FILE)>'0' ]
then
	echo "Пытаемся убить pdd:";
	ssh root@$TARGET_IP killall $EXEC_FILE;
	echo " - ок";
fi;
if [ $(ssh root@$TARGET_IP pgrep gdbserver)>'0' ]
then
	echo "Пытаемся убить gdbserver:";
	ssh root@$TARGET_IP killall gdbserver;   
	echo " - ок";
fi;

# Определяем расположение файлов
if [ -f "/root/pdd" ]; then
	echo "Удаляем старую локальную копию:" $REMOTE_DIR/$EXEC_FILE
	rm $REMOTE_DIR/$EXEC_FILE;               
	echo " - ок";
fi;

echo "Делаем новую локальную копию:";
cp $PROJECT_PATH/$EXEC_FILE $REMOTE_DIR/$EXEC_FILE;
echo " - ок";

echo "Переносим на ARM SOC" $PROJECT_PATH/$EXEC_FILE;
scp $PROJECT_PATH/$EXEC_FILE root@$TARGET_IP:$REMOTE_DIR;
ssh root@$TARGET_IP chmod +x ./$EXEC_FILE;
echo " - ок";

echo "Запускаем на удалённой машине gdbserver";
ssh root@$TARGET_IP 'gdbserver :2345 /root/pdd';
echo " - ок";
                        

Как видно исполняемый файл pdd отправляется на удалённую машину и там должен запуститься gdbserver и на этом выполнения скрипта следует завершить, НО выполнение скрипта не заканчивается до завершения gdbserver'a =( Следовательно, следующую команду надо выполнить на удалённой машине без считывания её вывода и без ожидания завершения:

ssh root@$TARGET_IP 'gdbserver :2345 /root/pdd';

Помогите плиз.

★★★

что люди только не изобретают лишь бы не использовать ansible, хотя он прямо просится в этом случае

adn ★★★ ()
Ответ на: комментарий от adn

Ну расскажите же как мне его использовать из среды Lazarus чтобы удалённая отладка поднималась по одной клавише?

AntonyRF ★★★ ()
Ответ на: комментарий от AntonyRF

так же как прописан запуск upload.sh
я, к сожалению, ни разу в жизни не видел Lazarus, поэтому точнее не скажу

adn ★★★ ()
Ответ на: комментарий от l0stparadise

Подозреваю, что вот так это решит проблему

Нет, пробовал. Вывод идёт в терминал, скрипт ждёт завершения pdd

AntonyRF ★★★ ()
Ответ на: комментарий от adn
Делаем новую локальную копию:
 - ок
Переносим на ARM SOC /media/sf_ResursPollDevicesDaemon/bin/pdd
pdd                                                                    100%   18MB  11.2MB/s   00:01
 - ок
Запускаем на удалённой машине gdbserver
[INFO] 22-9-17 14:50:56 >> Восстанавливаем ранее добавленные объекты...
[INFO] 22-9-17 14:50:56 >> Восстанавливаем настройки устройств...
[DEBUG] 22-9-17 14:50:56 >> TAbstractChannel -> Создаём поток FChannelThread

Произошёл запуск pdd и вижу отладочный вывод =(

AntonyRF ★★★ ()
Ответ на: комментарий от adn

Не скрина нет, но всё равно спасибо =) Правильный вариант оказался прост как две копейки =)

ssh -f root@$TARGET_IP 'gdbserver :2345 /root/pdd' &

AntonyRF ★★★ ()
Ответ на: комментарий от adn

я бы supervisor какой-нибудь для этого использовал и ansible для такой задачи. Но это исключительно мои предпочтения в подходе.

adn ★★★ ()
Ответ на: комментарий от adn

не очень правильный. Сессия то все-равно не закрывается. Просто висит у тебя в background'е

Ну логика такая, что после окончания отладки я убиваю gdbserver и сессия закрывается, вроде норм?

AntonyRF ★★★ ()
Ответ на: комментарий от AntonyRF

нет, система оркестрации. Там прописывается состояние в котором должен быть хост. И не важно в каком состоянии он был до этого, запуск приведет к этому состоянию.
Но под эти действия идеально доходит. Скопировать, перезапустить и так далее. Работает поверх ssh. На удаленном сервере должен быть python

adn ★★★ ()

Жесть какая-то - супервизоры, ансиблы...странно ещё что облачную виртуализация не присоветовали

zolden ★★★★★ ()
Ответ на: комментарий от zolden

и братишка докер покушать не предлагал ещё.

Deleted ()
Ответ на: комментарий от zolden

Жесть какая-то - супервизоры, ансиблы...странно ещё что облачную виртуализация не присоветовали

при чем тут облачная виртуализация? supervisord и ansible удобные легковесные инструменты. Первый позволит ему запускать gdbserver, а второй в удобной форме позволит реализовать процесс заливки и перезапуска. Видимо ты просто дела ни с тем, ни с другим не имел, раз они кажутся чем-то монструозным.

adn ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.