请给我关于期望脚本与新贵脚本相结合的建议。
我现在正在处理 3 个脚本。
脚本 A) Java 程序
PATH: /opt/~~/manager
脚本 B) 重生脚本 A 的新贵脚本
PATH: /etc/init/xx.conf
脚本C)健康检查程序– 推送脚本 A 将命令发送到另一台服务器中的进程并确认连接状态。由 cron 运行。
PATH: /opt/x~x/healthcheck.sh
我想做的是
1) 每次服务器重新启动或进程终止时重新启动 Java 进程 - 这已通过脚本 B 实现。
2)通过定期运行健康检查程序(脚本C)来保持Java进程与另一台服务器中的进程之间的连接,它的作用是通过telnet向邻居服务器进程发送链接命令。
我在上面提到的“2”上一直失败,我想寻求建议。
目前我的脚本如下:
脚本 B)
description “description”
start on runlevel [2345]
stop on runlevel [!2345]
env USER=executinguser
respawn
respawn limit 2 10
script
while [ ! "`ifconfig -s | grep eth1`" ]
do
sleep 5
done
su - ${USER} -c "source /opt/~~/.bash_profile && \
/opt/~~/manager start | \
tee -a /opt/~~.log"
end script
pre-start script
RET=`su - ${USER} -c "source /opt/~~/.bash_profile && \
/opt/~~/manager status > /dev/null" || echo $?`
if [ "$RET" -eq "0" ] || [ -z "$RET" ] ; then
su - ${USER} -c "source /opt/~~/.bash_profile && \
/opt/~~/manager force-stop"
fi
end script
pre-stop script
su - ${USER} -c "source /opt/~~/.bash_profile && \
/opt/~~/manager r force-stop"
end script
上面的脚本工作正常,并且进程重新生成而没有错误。
然后,为了向该脚本添加自动进程路由,我在主“脚本”部分之后添加了这一行以调用期望脚本。
/usr/bin/sh -f /etc/init/autolink.sh
并更改文件的权限以授予 exec 权限。 -rwxr-xr-x 1 root root 207 五月 14 11:25 autolink.sh
/etc/init/autolink.sh
#!/usr/bin/expect -f
puts "First test"
set CMD "link routename IPaddress Port"
set HOST "localhost"
spawn telnet ${HOST}
expect “`^]`"
send \"${CMD}\n\"
expect "000"
我也尝试过以下方法
#!/usr/bin/expect -f
puts "First test"
spawn telnet IPaddress Port
expect “`^]`"
send "link routename IPaddress Port"
expect "000"
我尝试过在脚本 B 上使用不同的路径调用期望脚本,并尝试使用不同的扩展名和 shebang 命名期望脚本,但它们都不起作用,事实上,我尝试过的选项都不会读取“puts”First test” 行或到达预期脚本的任何部分。
当我单独运行 Expect 脚本时 –# ./autolink.sh
它运行得很好,它收到“^]”,然后最后没有收到“000”,然后在发送链接命令后退出。
我也厌倦了<1>将expect脚本插入到upstart脚本中的变量中并回显该变量或<2>使用“expect –c”~~”或“/usr/进入脚本的expect部分宾/期望 <
我的问题是——我应该如何在shell脚本中调用一段expect脚本?应该如何使用适当的 shebang 和命令编写 Expect 脚本?
非常感谢您提前提供的帮助。