Cron Expect Script

时间:2018-01-19 18:01:47

标签: unix cron expect

我试图安排一个我用Cron编写的期望脚本。它没有按预期工作。这是我的代码,我在cron文件中的条目,以及包含运行脚本的命令的shell文件。任何帮助表示赞赏。

#!/usr/bin/expect

# Set timeout
set timeout 1

# Set the user and pass
set user "user"
set pass "pass"

# Get the lists of hosts, one per line
set f [open "hosts.txt"]
set hosts [split [read $f] "\n"]
close $f

# Get the commands to run, one per line
set f [open "commands.txt"]
set commands [split [read -nonewline $f] "\n"]
close $f

# Iterate over the hosts
foreach host $hosts {
    # Establish ssh conn
    spawn ssh $user@$host
    expect "password:"
    send "$pass\r"  

    # Iterate over the commands
     foreach cmd $commands {
        expect "$ "
        send "$cmd\r"
        expect "password:"
        send "$pass\r"
        expect "$ "
     }
}
0,15,30,45 * * * * /home/car02fv/updatelogs.sh #fetch application logs (dbg,api,ch)
#!/bin/sh
rm goxsd1697/* goxsd1698/* goxsd1699/* goxsd1700/* | /home/car02fv/getlogs.sh

3 个答案:

答案 0 :(得分:0)

这个答案来自我上面与Camilo的讨论

要检查错误日志并每15分钟运行一次脚本,

*/15 * * * * /home/car02fv/updatelogs.sh >/tmp/cron_out 2>&1

run使用

检查输出文件/tmp/cron_out

vi /tmp/cron_out

此外,您需要通过chmod u+x /home/car02fv/updatelogs.sh授予文件权限,以使脚本可执行。

答案 1 :(得分:0)

您没有提供需要阅读的文件的完整路径。 Cron脚本的PWD通常为/

假设“hosts.txt”和“commands.txt”位于/home/car02fv,您可以

0,15,30,45 * * * * cd /home/car02fv && ./updatelogs.sh

但是,这更加强大:假设您将这些文本文件保存在与脚本文件相同的位置:添加到expect脚本(靠近顶部)

set dir [file dirname [info script]]

然后,打开这样的文件:

set hostfile [file join $dir hosts.txt]
if {![file exists $hostfile]} {error "$hostfile does not exist"}
set f [open $hostfile]

# ...
set cmdfile [file join $dir commands.txt]
if {![file exists $cmdfile]} {error "$cmdfile does not exist"}
set f [open $hoscmdfiletfile]

并且cron条目就像你拥有它一样。

BTW,“。sh”是期望文件的误导性文件扩展名。

答案 2 :(得分:0)

#!/bin/sh
while true; do
rm goxsd1697/* goxsd1698/* goxsd1699/* goxsd1700/* | /home/car02fv/getlogs.sh
sleep 120
done