Expect script to collect logs in expert mode


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Expect script to collect logs in expert mode
# 1  
Old 09-10-2017
RedHat Expect script to collect logs in expert mode

I am trying to collect logs from a system in expert mode. Where I login to system and then change mode to expert mode and issue command to collect the log. I have a script which works but It waits for 30 mins even though log collection is complete before that. I have two issues with existing script.

1. Since log collection takes really long time (sometimes about 30 minutes). Expect script does not wait for the prompt and exits at timeout value. So I don't get complete O/P. Hence, I added timeout value of 1800 secs. But this one forces script to wait for 30 mins. I would like to exit as soon as I am back on prompt. I tried using expect exact but need some help on this.

2. How can I capture the current prompt itself as a variable and ask Expect to wait until it gets the prompt. or Make a prompt based on Username variable and hostname lie - USERNAME@SYSNAME##.

Here is my current code.
Code:
#!/usr/bin/expect -f
set timeout 5
set hostname [lindex $argv 0]
set username "admin"
set password "password"
set prompt "(>|#|\\\$) $"


spawn ssh $username@$hostname
expect {
    ".*key fingerprint" {send "yes\r"; exp_continue}
    "assword:" {send "$password\r"}
}

expect -re {\$prompt}

send "show product id\r"

expect -re "\nProduct ID: (.*)$prompt"
set PRDID $expect_out(1,string)

#send "hostname\r"
#expect -re "\n (.*)$prompt"
#set HNAME $expect_out(1,string)



expect -re $prompt
send "expert mode\r"
expect -re "assword:" {send "$PRDID\r"}
#send "$PRDID\r"
expect -re $prompt
#set output $expect_out(buffer);

send "show detailed logs\r"
set timeout 1800  ### To wait for 30 mins
## expect -re $prompt
expect -exact "(.*)## $"   ### I tried using expect exact. But it seems something wrong here.
###  expect -exact "\nSA@$HNAME##$"
send -- "\r"
send "exit\r"
#puts [open w] $expect_out(buffer);
expect eof
[root@se scripts]#

# 2  
Old 09-11-2017
If it waits for the full 30 minutes, it means that expect does not see the string you are waiting for.

You are writing
Code:
expect -exact "(.*)## $"

which means that you are waiting for the string "(.*)## $" to appear somewhere. I don't think this is what you want to achieve.

You can use exact, if you know the exact sequence of characters. In your case, it seems to me more natural do do an anchored regular expression matching, to cope for variations in, say, whitespace, for example

Code:
exact -re {^.+@.+ *## *[$] *$}

Please see it only as a suggestion to start with. I don't know what's in your output in general, and you have to judge by yourself, how to write the regexp so that you don't accidentally catch a line in your logs which looks the same.
This User Gave Thanks to rovf For This Post:
# 3  
Old 09-12-2017
This is what I am using now and it doesn't timeout now and I get complete logs in O/P.
Code:
        sleep 1
    expect {
        timeout {send "\r"; exp_continue}
        "SA@*## "
    }

# 4  
Old 09-12-2017
Well, that it doesn't timeout, I can understand: You are executing exp_continue in the case of timeout, which means that you cancel the timeout and continue waiting.

Now to the case why it doesn't match. You are using a globbing match here, so the pattern should match whenever a line contains the string "PA@" and later in the same line "## ". My guess is that for whatever reason, such a line is not delivered.

After fixing the timeout issue, have a look at the $expect_out(buffer) whether you can find there the line you are looking for.
# 5  
Old 09-12-2017
Appreciate your help rovf
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to set file transfer in binary mode in SFTP using Expect?

The below is my script. /usr/bin/expect<<EOD spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST expect "sftp>" expect "password:" set timout 15 send "$password\r" expect "sftp>" send "lcd $remotedir\r" expect "sftp>" ... (1 Reply)
Discussion started by: Anilsaggu9
1 Replies

2. Shell Programming and Scripting

If I ran perl script again,old logs should move with today date and new logs should generate.

Appreciate help for the below issue. Im using below code.....I dont want to attach the logs when I ran the perl twice...I just want to take backup with today date and generate new logs...What I need to do for the below scirpt.............. 1)if logs exist it should move the logs with extention... (1 Reply)
Discussion started by: Sanjeev G
1 Replies

3. Shell Programming and Scripting

Expect doesn't output the logs

(qemu) migrate -d tcp:192.168.122.1:4444 (qemu) info migrate capabilities: xbzrle: off Migration status: completed total time: 4425 milliseconds downtime: 3 milliseconds transferred ram: 130338 kbytes remaining ram: 0 kbytes total ram: 1057152 kbytes duplicate: 232613 pages normal:... (0 Replies)
Discussion started by: yanglei_fage
0 Replies

4. Shell Programming and Scripting

How to collect the logs with in two time stamp ?

Hi Gurus I need to collect the logs between two time stamp... The log files 12 hours format (ex- Nov 14, 2013 12:10:16 AM UTC) I tried the below commands but no luck. awk '$0 >= "Nov 14, 2013 9:40:01" && $0 <= "Nov 14, 2013 9:55:01"' file sed -n '/Nov 14, 2013 7:58:00 PM UTC/,/Nov 14, 2013... (5 Replies)
Discussion started by: zenkarthi
5 Replies

5. Red Hat

collect red hat linux error logs

Hi, I have two questions,first of all is where can I collect more error logs(the log under /var/log/messages), also give the corresponding explain is grateful.The second one is the log under various versions(such as red hat,suse,etc) is the same or not. Thanks for answers. (1 Reply)
Discussion started by: zhaoyy
1 Replies

6. Shell Programming and Scripting

Expect command use for interactive mode of scripting

Hi All, I am writing a script(Auto_Installation.sh) which is calling one another script (./update_manager /spare/install/HO7/PME_Response_file.txt) Now the issue is result of (./update_manager /spare/install/HO7/PME_Response_file.txt) script is ##########################################... (6 Replies)
Discussion started by: Dhruvak
6 Replies

7. Shell Programming and Scripting

script to collect all db information

hi all I am looking for shell script ,by which i need to gather all the DB information in Sybase server . Thanks in advance :) (3 Replies)
Discussion started by: mvsramarao
3 Replies

8. Shell Programming and Scripting

Need help with Expect script for Cisco IPS Sensors, Expect sleep and quoting

This Expect script provides expect with a list of IP addresses to Cisco IPS sensors and commands to configure Cisco IPS sensors. The user, password, IP addresses, prompt regex, etc. have been anonymized. In general this script will log into the sensors and send commands successfully but there are... (1 Reply)
Discussion started by: genewolfe
1 Replies

9. Shell Programming and Scripting

strange expect script behavior, or am i misunderstanding expect scripting?

Hello to all...this is my first post (so please go easy). :) I feel pretty solid at expect scripting, but I'm running into an issue that I'm not able to wrap my head around. I wrote a script that is a little advanced for logging into a remote Linux machine and changing text in a file using sed.... (2 Replies)
Discussion started by: v1k0d3n
2 Replies
Login or Register to Ask a Question