bash - 是否有类似“超时”的功能可以跳过命令而不是杀死它?
问题描述
我写了一个无限的while循环来运行4个脚本,一次两个,但是当一个脚本执行时它等待它完成,而不是循环。
while true; do
script1.sh & script2.sh
script3.sh & script4.sh
done
这次我添加了超时,它杀死了一个活动脚本。通常每个脚本运行一个小时。
解决方案
我已经通过添加一个PID
防止活动脚本再次运行来修复它,每个脚本都添加了这个
PIDFILE=$pid.pd
if [ -f $PIDFILE ]
then
PID=$(cat $PIDFILE)
ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Process already running"
exit 1
else
## rocess not found assume not running
echo $$ > $PIDFILE
if [ $? -ne 0 ]
then
echo "Could not create PID file"
exit 1
fi
fi
else
echo $$ > $PIDFILE
if [ $? -ne 0 ]
then
echo "Could not create PID file"
exit 1
fi
fi
//insert commands here
rm $PIDFILE
并通过使用在后台运行每个脚本&
while true; do
script1.sh & script2.sh &
sleep 1.5
script3.sh & script4.sh &
sleep 1.5
done
并sleep
用于 CPU 处理。感谢乔纳森和查尔斯。
推荐阅读
- ruby-on-rails - Rails 范围内的正则表达式未捕获正确的值
- spring-security - Keycloak - 将客户端登录限制为组成员
- node.js - 通过 webhook 将 basecamp 3 与 Mavenlink 集成?
- reactjs - Keycloak - 保护 Spring Boot 应用程序
- c - 如何通过喜欢的列表编写出队的功能出队
- html - 如何防止延迟样式加载每个页面加载而不是第一次加载?
- google-app-maker - AppMaker - 仅在选项卡中显示过滤的项目
- javascript - 尝试访问 JSON 数组中的密钥
- vb.net - 如何制作可编辑的datagridviewComboBox
- angular - 在 Angular 中将数据发送到 firebase 数据库时出现错误