Получить заданное c сообщение из вывода и сохранить информацию в лог-файл - PullRequest
1 голос
/ 19 января 2020

У меня есть сценарий te lnet ожидаемый, используемый только для проверки работоспособности сервера.

#!/usr/bin/expect
set IP 192.168.5.100
catch {spawn -noecho telnet $IP}
set timeout 3
expect {
  timeout
    { send_user "Telnet timed out waiting for $IP\n" ; exit }
  "onnection refused"
    { send_user "Connection was refused to $IP\n" ; exit }
  "No route"
    { send_user "System $IP is unknown\n" ; exit}
  "login:"
}
send_user "Success\n" ; exit

Это работает отлично, и я вызываю его из другого сценария bash, чтобы сохранить сообщение в файл журнала. Проблема в том, что на выходе слишком много информации, например, если сервер недоступен:

# ./checkconn.expect                 
Trying 192.168.5.101...
telnet: connect to address 192.168.5.101: No route to host
System 192.168.5.101 is unknown

Если сервер доступен:

Trying 192.168.5.100...
Connected to 192.168.5.100.
Escape character is '^]'.
--- Unauthorised access prohibited ---
This is a closed-access system. If you do not have permission
to access this system, then log off now. If you remain logged on
you consent to monitoring of your actions.
z1 login: Success

Так что я бы хотел сохранить в журнале ТОЛЬКО сообщение, отправленное сценарием ожидаемого, как в приведенном выше примере «Система 192.168.5.101 неизвестна»

Как я могу это сделать? Спасибо, Лукас

Ответы [ 2 ]

2 голосов
/ 19 января 2020

expect Утилита имеет pro c с именем log_file для записи журналов.

In man expect:

log_file [args] [[-a] file]
             If  a filename is provided, log_file will record a transcript of the session (beginning at that point) in the file.  log_file will stop recording if no argument is given.  Any previous log file is
             closed.

         Instead of a filename, a Tcl file identifier may be provided by using the -open or -leaveopen flags.  This is similar to the spawn command.  (See spawn for more info.)

         The -a flag forces output to be logged that was suppressed by the log_user command.

         By default, the log_file command appends to old files rather than truncating them, for the convenience of being able to turn logging off and on multiple times in one session.  To  truncate  files,
         use the -noappend flag.

         The -info flag causes log_file to return a description of the most recent non-info arguments given.`

Вы можете просто использовать вот так:

#!/usr/bin/expect
set IP 192.168.5.100
catch {spawn -noecho telnet $IP}
set timeout 3
log_file your_log_file.log
---
---
---
0 голосов
/ 19 января 2020

Если ваш скрипт выполняется путем ввода

./yourscript

, тогда вы можете использовать что-то вроде следующего канала:

./yourscript | sed -n '/^System.*is unknown$/p' > logfile
...