Почему умирает мой процесс Nohup?

Для автоматизации команд я много лет использовал expect . Замечательно имитировать интерактивный сеанс либо при работе с упрямыми командами, требующими интерактивности, либо для взаимодействия с активными устройствами или другими серверами в вашей сети. Я до сих пор использую его для входа в активное оборудование, получения статистики и автоматического резервного копирования.

Expect - это программа, которая «разговаривает» с другими интерактивными программами в соответствии со сценарием. Следуя сценарию, Expect знает, чего можно ожидать от программы и каким должен быть правильный ответ. Интерпретируемый язык предоставляет структуры ветвления и управления высокого уровня для управления диалогом. Кроме того, пользователь может взять на себя управление и при желании взаимодействовать напрямую, после чего вернуть управление скрипту.

Использование сценариев ожидания для автоматизации задач

В качестве примера сценарий ожидания, который я написал для тестирования службы POP:

#!/bin/sh
# \
exec expect "$0" ${1+"$@"}

set force_conservative 0  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn telnet 127.0.0.1 110
match_max 100000
expect {
"Hello"    { send -- "USER user@domain.pt\r"; exp_continue
       }
"assword" { send -- "PASS password\r" ; exp_continue
       }
"logged"   {
         send -- "LIST 1\r" ; exp_continue
   }
-re "failed|denied"   { exit
       }
"OK 1" { send -- "QUIT\r"; }
}

В соответствии с моим разговором с @cas, я также хотел бы указать, что простое регулярное выражение ожидает Подмножество языка полезно для коротких сценариев автоматизации / [очень] грубых прототипов вместе с bash.

Если есть необходимость в более сложной обработке вывода, интерактивная обработка может / лучше выполняться на другом языке программирования.

Например, в python, pexpect или даже в C, используя libexpect или miniexpect .

В последнее время с движением DevOps у вас появился целый ряд новых [и старых] фреймворков для автоматизации системных задач, таких как Ansible , Puppet, Salt.

Однако они требуют обучения и дополнительных ресурсов. Я лично предпочитаю Ansible.

Подсказка Ansible: запуск интерактивных сценариев с помощью Ansible

0
15.03.2019, 22:54
1 ответ

nohupсама по себе не проживет долго (по крайней мере какnohup):

$ nohup sleep 10 < /dev/null > /dev/null &
[1] 773
$ pgrep nohup
$ pgrep sleep
773
$ echo "time passes.."
time passes..
[1]+  Done                    nohup sleep 10 < /dev/null > /dev/null

Вместо этого вы хотите искать, в вашем случае, процесс java.

2
28.01.2020, 02:30

Теги

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