expect set timeout -1 永不超时

93 篇文章 ¥39.90 ¥99.00
通过在expect脚本中设置timeout为-1,可以确保rsync命令在执行远程文件同步时不会超时。该脚本示例中,expect会发送密码并等待rsync命令完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

. ~/.bash_profile
passwd='xxx'

expect <<!
set timeout -1
spawn  rsync -avH /webapps/Seeyon/A8/base/upload/ root@120.26.93.217:/webapps/Seeyon/A8/base/upload/
expect {
    "(yes/no)?" {
        send "yes\n"
        expect "password:"
        send "$passwd\n"
    }
        "password:" {
        send "$passwd\n"
    }
 }
expect eof
exit
!

`timeout` 是 Unix/Linux 系统中非常实用的一个命令,它允许用户限制某个命令的最大执行时间。当指定的时间到达后,如果目标命令还没有结束,`timeout` 就会发送终止信号给该命令,默认情况下发送的是 SIGTERM(15),若超时的进程仍然未退出,则稍后再发 SIGKILL(9)强制杀死它。 除了 `timeout` 之外,还有几种方法可以在 Shell 中实现相似的效果: ### 使用 `expect` `expect` 是一个强大的自动交互工具,通常用来处理需要人工输入密码等情况下的自动化任务。不过也可以利用它的特性来做定时控制。 示例: ```bash #!/usr/bin/expect -f set timeout 60 ;# 设置最大等待时间为60秒 spawn my_command.sh arg1 arg2... interact { eof {exit} } if {[wait] != 0} { puts "Command timed out or failed." exit 1 } ``` 这种方法相对复杂一点,适合有一定编程经验的人士使用。 ### 结合 `at` 和后台作业调度 通过将待执行的任务放入队列并在未来某时刻启动,并同时设置另一个立即生效但仅延后 N 秒触发的 kill 事件来达到效果。 步骤如下: 1. 把想要运行的命令放到背景进程中执行; 2. 向 at 批量处理器提交一条记录,指示在一定间隔之后向此 PID 发送 KILL 信号; 实例演示: ```bash (sleep 30 && pkill -f 'my_long_running_process') & ./my_long_running_process & wait $! ``` 这里假设 `my_long_running_process` 是您希望监控其执行时限的目标程序名。 请注意上述做法较为粗糙,特别是在多线程环境下可能会误杀无辜进程。因此建议优先考虑官方提供的 `timeout` 工具除非有特别需求不得不另寻他法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值