我试图安排一个我用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
答案 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