Я хочу иметь один сценарий, который запускает службы на другом сервере.
Я проверил, что сценарий работает должным образом на сервере, на котором будет запускаться сервер.
Этоэто код, который запускает службу и отслеживает журнал до тех пор, пока он не будет запущен:
pkill -f "$1"
nohup java -jar -Dspring.profiles.active=$PROFILE $1 &
tail -n 0 -f nohup.out | while read LOGLINE
do
echo $LOGLINE
[[ "${LOGLINE}" == *"$L_LOG_STRING"* ]] && pkill -P $$ tail
done
Это прекрасно работает, пока я выполняю его с этой машины.
Теперь я хочучтобы вызвать этот скрипт с другого сервера:
#!/usr/bin/env bash
DESTINATION_SERVER=$1
ssh root@$DESTINATION_SERVER /bin/bash << EOF
echo "Restarting first service..."
/usr/local/starter.sh -s parameter
echo "Restarting second service..."
/usr/local/starter.sh -s parameter2
EOF
Ну, каждый раз, когда я пытаюсь, чтобы скрипт удаленного сервера застревал в цикле while READ.Но, как я уже сказал, когда я выполняю его локально с сервера, он работает нормально, и в моем «не упрощенном сценарии» я не использую какие-либо системные переменные или аналогичные.
Обновление : Я только что попытался еще больше упростить код с помощью следующих строк в первом сценарии:
pkill -f "$1"
nohup java -jar -Dspring.profiles.active=$PROFILE $1 &
tail -n 0 -f nohup.out | sed "/$L_LOG_STRING/ q"
Я бы сказал, что проблема в том, какв "|"через ssh, но я все еще могу найти почему.