可以用新版本替换bash脚本导致脚本的正在运行的实例失败

前端之家收集整理的这篇文章主要介绍了可以用新版本替换bash脚本导致脚本的正在运行的实例失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在服务器上的java程序中运行bash脚本。我刚刚上传了一个新版本的脚本,旨在下一次运行脚本以使用该版本。我并不意味着中断现有的,正在运行的脚本实例。但是,我刚从300台服务器收到了超过100次的崩溃通知。我猜想用新版本替换正在运行的bash脚本导致这一点。但是,这将要求运行的bash脚本从磁盘读取到每个新的步骤。这是怎么运作的?

bash脚本的运行版本运行一些光线跟踪软件。每次跑步需要2个小时。子步骤需要5分钟至1.5小时。脚本总是在脚本中完成一个步骤后报告崩溃。它从来没有报告崩溃已经运行的子步骤。一些崩溃报告没有找到我在脚本中找不到的命令。不同的崩溃报告不同的地方。

帮帮我!

编辑:我使用scp将脚本复制到所有300台服务器。该文件被替换在文件系统上。这不是共享文件

SiegeX是一半,bash会将整个脚本加载到内存中,因此脚本可以继续运行,即使在进程运行时它的源文件删除。但是,bash还会检查在脚本运行时源文件是否更新。如果是这样,bash将重新加载它,并从当前位置继续运行,重新打开该文件,寻求脚本的当前位置,并从该点继续运行脚本。

这是一个概念验证脚本:

# If you modify a script,will it change the behavior of
# processes that are currently running that script?
# Does this script print "Foo" or "Bar"?

cat >foo.sh <<EOF
sleep 5
echo Foo
EOF

bash foo.sh &
sleep 2

cat >foo.sh <<EOF
sleep 5
echo Bar
EOF

wait

因此,如果您关心当前正在运行该脚本的进程,那么结果是不要修改bash脚本的源文件

(此脚本显示“Foo”,bash脚本的“当前位置”始终位于行的开头或结尾。)

echo "sleep 5 ; echo Foo" > foo.sh
bash foo.sh &
sleep 2
echo "sleep 5 ; echo Bar" > foo.sh
wait
原文链接:https://www.f2er.com/bash/387593.html

猜你在找的Bash相关文章