Для автоматизации команд я много лет использовал 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
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
.