Я пытаюсь использовать оператор nohup + перенаправление + фон («&») для запуска удаленного скрипта через SSH и отключения.
Это работает:
ssh -n fred@fredbox.local 'nohup sudo /opt/scripts/do-thing.sh arg1 arg2 >/dev/null 2>&1 '
Я хочу инкапсулировать части nohup внутри оболочки, которая запускает фактический удаленный скрипт, но выполняет перенаправление nohup и вывода. Но это просто не работает.
Пример удаленного скрипта "/opt/scripts/remote-exec-script.sh":
#!/usr/bin/env bash
set -o xtrace
set -o errexit
set -o nounset
ARG1=${1}
ARG2="${2}
nohup sudo /opt/scripts/do-thing.sh $ARG1 $ARG2 >/dev/null 2>&1
Размещение nohup и перенаправления вывода в самом удаленном скрипте не работает.
У меня есть xtrace, поэтому я даже попытался захватить stderr в строке SSH вот так
ssh -n fred@fredbox.local "/opt/scripts/remote-exec-script.sh >/dev/null 2>&1"
Это вообще возможно?
Я понял проблему; это связано с pty
распределение (-tt
флаги по ssh) и sudo.
TL; DR: это работает так, как я хотел, пока удаленный сценарий удовлетворяет следующим условиям:
pty
распределение используется -S
флаг для sudo, чтобы принять пароль через stdin. Я этим методом не пользовался.Я использовал вариант (2) - у удаленного пользователя есть sudo без пароля.