Я выполняю сценарий bash в Node.js следующим образом:
const script = child_process.spawn('local_script.sh');
const stdout = fs.createWriteStream('stdout');
const stderr = fs.createWriteStream('stderr');
script.stdout.pipe(stdout);
script.stderr.pipe(stderr);
script.on('close', function(code) {
console.log('Script exited with code', code);
});
My local_script.sh
загружает сценарий на мой удаленный сервер и выполняет его:
#!/bin/bash
FILE=/root/remote_script.sh
HOST=123.456.78.9
scp remote_script.sh root@${HOST}:${FILE}
ssh root@${HOST} bash ${FILE}
Наконец, мой remote_script.sh
должен открыть туннель S SH (и выполнить некоторые другие действия, не относящиеся к этому вопросу):
#!/bin/bash
REDIS_HOST=318.353.31.3
ssh -f -n root@${REDIS_HOST} -L 6379:127.0.0.1:6379 -N &
Проблема в том, что, хотя я ' Когда я открываю туннель S SH в фоновом режиме, кажется, что мой remote_script.sh
никогда не выходит, потому что событие Node.js close
никогда не вызывается. Если я не не открою туннель S SH, он завершает и отправляет событие, как и ожидалось.
Как я могу убедиться, что скрипт завершается корректно после открытия S SH туннель? Обратите внимание, что я хочу, чтобы туннель сохранялся после завершения скрипта.