оболочка удара - ssh удаленный вывод получения сценария и код выхода?

В дополнение к определенному для Java предложению Nikhil jps и предложение Rory для рассмотрения журнала:

Можно искать процесс в выводе htop (или top, который имеет более дрянной UI). Вы будете видеть, сколько процессорного времени это в настоящее время использует.

Можно проследить процесс с strace (на Linux или некотором эквиваленте такой как trace или dtrace или ktrace на других нельдах): strace -p1234 где 1234 является идентификатором процесса. Это скажет Вам, если процесс сделает что-то (который может или не может быть чем-то полезным), или если это заблокировало ожидание входа где-нибудь.

25
18.09.2016, 04:33
3 ответа

Причина Вы не получаете корректный код ошибки, состоит в том потому что local на самом деле последняя выполняемая вещь. Необходимо объявить переменную как локальную до выполнения команды.

local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?

Вы видите проблему здесь:

$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
$ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar
0
$ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
39
27.01.2020, 19:40

"Локальное", кажется, проблема. Это работает на меня:

local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?
8
27.01.2020, 19:40
  • 1
    , Вы были правы также, но jodanm был больше быстрее! –  mconlin 01.03.2013, 19:29
  • 2
    Да, 26 секунд. –  Hauke Laging 01.03.2013, 19:30
  • 3
    Не английский класс, но неправильно сказать 'больше быстрее'. –  mtahmed 01.03.2013, 20:34
  • 4
    я знаю это, был шуткой. Плохой я предполагаю. В Интернете никто не знает, что Вы - собака. –  mconlin 05.03.2013, 16:30
  • 5
    также ответ jordanm объясняет, ПОЧЕМУ это было проблемой :) –  Doktor J 27.09.2016, 21:56

На самом деле, ни один из приведенных выше ответов не перехватывает код ошибки и сообщение ssh, что можно сделать следующим образом (игнорировать мои пользовательские переменные и функции):

# move the deployment package from the tmp dir
msg=$(ssh -i "$(eval echo $identity_file)" -o ConnectTimeout=5 "$ssh_user"'@'"$ssh_server" \
sudo -iu "$etl_user" bash "$tgt_deployment_dir"'/src/bash/'"$run_unit/$run_unit"'.sh' \
    -a create-relative-package 2>&1)

# fail on any non-success
export exit_code=$?
export err_msg="network error: ""$msg"
test $exit_code -ne 0 && echo "$err_msg" && exit $exit_code
4
27.01.2020, 19:40

Теги

Похожие вопросы