我希望有人能够帮助我解决这个问题,我需要一个 shell 脚本循环,它将运行循环内的内容 15 秒。所以例如
if (true)
run command for 15 seconds
fi
kill PID
我是 shell 脚本的新手,所以我迷失了。如果这有什么不同,我也正在使用 debian instll
任何帮助表示赞赏
你在寻找timeout
命令吗?
以下 bash 脚本可能对您有用。该脚本将在开始循环之前将初始纪元时间设置为变量。在循环运行时,将使用当前纪元时间设置一个附加变量。将比较两个纪元时间,只要差异小于或等于 15,您的命令将继续运行。请注意,在下面的脚本中,当前运行的命令是'echo "counting ${COUNTER}"'。您应该更改脚本的这一部分以匹配您要完成的任务。一旦两个 epoch 时间的差异大于 15,脚本将退出。此时您将需要启动您的 kill 命令。如果确实发生错误,您应该在“YourLogFile”中看到“ERROR...YourScript.sh failed”(将您的日志文件设置为您想要的)
注意:无论您在此循环中尝试运行什么,都可能在 15 秒内运行很多很多次。通过使用下面的脚本作为测试,您将看到 echo 命令每秒运行超过 50 次。
#!/bin/bash
LOOP="true"
INITIAL_TIME=$(date "+%s")
while [[ ${LOOP} == true ]]; do
CURRENT_TIME=$(date "+%s")
COUNTER=$(expr ${CURRENT_TIME} - ${INITIAL_TIME})
if [[ ${COUNTER} -le "15" ]]; then
echo "counting ${COUNTER}"
# RUN YOUR COMMAND IN PLACE OF THE ABOVE echo COMMAND
elif [[ ${COUNTER} -gt "15" ]]; then
exit 0
#INITIATE YOUR KILL COMMAND IN PLACE OF OR BEFORE THE exit
else
echo "ERROR... YourScript.sh failed" >> /YourLogFile
fi
done