加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:11:21 所属栏目:安全 来源:网络整理
导读:我正在服务器上的java程序中运行bash脚本。我刚刚上传了一个新版本的脚本,旨在下一次运行脚本以使用该版本。我并不意味着中断现有的,正在运行的脚本实例。但是,我刚从300台服务器收到了超过100次的崩溃通知。我猜想用新版本替换正在运行的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读