| |||||||||||
Using Expect with cron Posted by sarmstro (sarmstro), 2 August 2005 Having a nightmare trying to get a simple expect script to run through cron. I'm spawning a ping and then expecting a regexp pattern to pull out the ip of the machine. The trouble is, as soon as the ping is spawned, it's getting an eof (I can see this through the exp_internal output). Anyone have any ideas?Cheers, Scott Posted by admin (Graham Ellis), 2 August 2005 Does the expect script run correctly from the command line? (I'll make an educated guess that it does )The output of cron jobs is usually captured by the cron system and sent on to you by email I'm wondering if this feature / capture is getting in the way ... Also wondering if the crontab has the same PATH variable settings as the command line test - you might get the behaviour you described if ping isn't in the PATH and a "command not found" gets sent to STDOUT .... In fact ... testing .... Code:
Worked from the command line and FAILED under cron for me Code:
Worked from th ecommand line and WORKED under cron for me Posted by sarmstro (sarmstro), 2 August 2005 Thanks for the reply, Graham.ping is in /bin in my system (debian), which is in the cron path and gets run ok. The redirected script output is as follows when run through cron: spawn ping headline-32 parent: waiting for sync byte parent: telling child to go ahead parent: now unsynchronized from child spawn: returns {6141} expect: does "" (spawn_id exp11) match regular expression "[0-9]+.[0-9]+.[0-9]+.[0-9]+"? no expect: read eof expect: set expect_out(spawn_id) "exp0" expect: set expect_out(buffer) "" the sudden read eof is what's getting me. This does work fine outside of cron. I've tried setting the TERM env variable as well, as it's listed in Libes book as a pitfall. Cheers, Scott Posted by admin (Graham Ellis), 2 August 2005 ping is one of those great utilities that seems to differ under different versions of *nix ... I know that I've had separate expect programs for Caldera and Red Hat in the past ... and I don't have a Debian system to hand to "play" with. Perhaps the Debian ping isn't reporting the IP address in some circumstances, and that's why there's no match? If I was in your shoes, I would be printing out my expect_out (buffer)s at each step to see what I had actually received. -- Graham P.S. Might be a good idea to put a \\ in front of each . in the regular expression - "literally match a ." rather than "match any character". That will cut out the chance of certain spurious matches - e.g. to any 7 digit number. Posted by sarmstro (sarmstro), 2 August 2005 Hi Graham,Yeah, I thought I hadn't escaped those dots enough in the regular expression - I'll change that. This ping script is actually run sourced from another script which doesn't itself spawn any processes, but does do some logging activities using a STAF process (not sure if you're familiar with STAF). I've tracked it down to the fact that something which goes before, leaves a process running which causes this eof, because if I put in a catch {close} statement before running each test in the framework, it solves the problem. If I just put in "close", sometimes there is no process and it bombs. So, still haven't really found the solution but have found a fudge around it, and still can't really explain why running through cron would make a difference to this. Thanks, Scott Posted by sarmstro (sarmstro), 3 August 2005 Fixed it at last!The problem was I had defined an expect_after statement: expect_after timeout { log "timed out waiting for some string" ERROR testStep "FAIL" "timed out waiting for string - raised by expect_after" } (log and testStep are pre-defined procedures in my test automation framework) This statement was in one of the libraries I was loading in. This somehow caused an eof to the first process I would spawn, messing up my tests. Anyway, thought you'd like to know. Thanks for your help, Scott Posted by admin (Graham Ellis), 5 August 2005 Ah! Expect is so gloriously OO that ... things like this can happen. Although it can work with multiple processes, you've got to take care to save and restore settings such as the spawn_id if you want to do this. Anyway - glad you're sortedThis page is a thread posted to the opentalk forum
at www.opentalk.org.uk and
archived here for reference. To jump to the archive index please
follow this link.
|
| ||||||||||
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho |