Linux 是否可以从bash脚本设置超时?
有时,我的bash脚本没有明确的原因而挂起 所以它们实际上可以永远挂起(脚本进程将一直运行,直到我杀死它)Linux 是否可以从bash脚本设置超时?,linux,bash,process,settimeout,Linux,Bash,Process,Settimeout,有时,我的bash脚本没有明确的原因而挂起 所以它们实际上可以永远挂起(脚本进程将一直运行,直到我杀死它) 是否可以结合bash脚本超时机制,以便在例如½小时后退出程序 如果您有Gnu coreutils,可以使用timeout命令: timeout 1800s ./myscript 要检查是否发生超时,请检查状态代码: timeout 1800s ./myscript if (($? == 124)); then echo "./myscript timed out after 30
是否可以结合bash脚本超时机制,以便在例如½小时后退出程序 如果您有Gnu coreutils,可以使用
timeout
命令:
timeout 1800s ./myscript
要检查是否发生超时,请检查状态代码:
timeout 1800s ./myscript
if (($? == 124)); then
echo "./myscript timed out after 30 minutes" >>/path/to/logfile
exit 124
fi
此仅限Bash的方法通过将函数作为后台作业运行来强制执行超时,从而封装脚本中的所有超时代码:
#!/bin/bash
Timeout=1800 # 30 minutes
function timeout_monitor() {
sleep "$Timeout"
kill "$1"
}
# start the timeout monitor in
# background and pass the PID:
timeout_monitor "$$" &
Timeout_monitor_pid=$!
# <your script here>
# kill timeout monitor when terminating:
kill "$Timeout_monitor_pid"
#/bin/bash
超时=1800#30分钟
函数超时\u监视器(){
睡眠“$Timeout”
杀死“$1”
}
#在中启动超时监视器
#背景并通过PID:
超时\u监视器“$$”&
超时\u监视器\u pid=$!
#
#终止时终止超时监视器:
终止“$Timeout\u monitor\u pid”
请注意,该函数将在单独的进程中执行。因此,必须传递受监视进程的PID(
$
)。为了简洁起见,我省略了通常的参数检查。找到错误行为的原因是否更有意义?是的,但我想知道超时选项。好的,制作一个启动包装器:wapper启动您的脚本,获取其进程id,并用它在30分钟后注册cron作业。cron作业在进程id上执行kill命令。嗨,伙计们,你们能发布你们的答案吗?这样我会选择最符合逻辑的答案。后台进程不会让主进程运行吗?这意味着即使脚本已完全执行,也将始终超时?@Alan:是的,它将始终超时。不,主进程将不会保持运行,但后台进程将保持运行。如果这对您来说是个问题,您可以从$存储后台进程的PID
并在终止主程序之前终止它。或者使用退出
处理程序。或者按照rici的建议使用Gnu的timeout
。存储超时监视器PID并终止它应该可以完成这项工作。也许你会考虑把它加入你的答案中,这是第一个出现在谷歌上的答案之一。(我正在记录脚本是否超时,所以如果脚本事先完全执行,我需要后台进程停止)@Alan:好的,按照你的建议,增加了对监视器的杀戮。是否可以在超时发生时将某些内容记录到文件中?