gpt4 book ai didi

linux - 递归调用sh脚本的安全方法

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:01 24 4
gpt4 key购买 nike

所以我发现在 Linux 中这样做的困难方法真的很糟糕:

# a.sh
while true
do
some stuff
sh a.sh
done

我希望能够更新脚本并让它自行修复。这样的东西被认为是安全的吗/

# a.sh
while true
do
wget http://127.0.0.1/b.sh
sh b.sh
done

# b.sh
some stuff

这样我就可以更新脚本b.sh并且它的下一次执行将被强制更新自 a.sh称之为?

最佳答案

如果您希望一个进程更改其源代码并重新启动自身,并且您不希望该进程的多个(略有不同)副本同时运行,那么您需要以某种方式终止父进程。你如何做到这一点并不重要;重要的是。例如,如果代码的“重写自身”部分仅在实际需要重写时触发,那么您可以将“exit”放在调用重写脚本的行后面。 (我怀疑像 mv -f b.sh a.sh && sh a.sh && exit 这样的东西也可能起作用,因为我认为在脚本被销毁之前整行都会被发送到 Bash 解释器。)

如果您确实希望运行进程的多个副本,那么您需要找到某种方法来限制此数量。例如,您可以让脚本在 fork 之前检查其自身已经运行了多少次迭代。

请注意,在这两种情况下,这都假设您的脚本已准确地修改了自身,这......至少可以说是一个棘手的问题。你正踏上危险的土地。

最后,如果您真正想要的是一个在死亡时自动重新启动的守护进程(这听起来就像您在评论中所描述的那样),那么还有其他方法可以实现此目的。我不太熟悉这类事情通常是如何完成的,但我想在 shell 脚本中您可以简单地使用 trap。 (trap a.sh EXIT 可能就足够了,尽管如果您后来发现自己犯了一个错误,这将使您的脚本相当难以永久终止。)

关于linux - 递归调用sh脚本的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28164961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com