gpt4 book ai didi

linux - 无法删除共享文件系统中的文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:48 24 4
gpt4 key购买 nike

在今天部署用于容器的Linux应用程序期间,该应用程序开始出现故障,但从未出现过。调查Kudu中的日志,我可以看到该应用程序无法运行,因为在安装依赖项期间,该程序将在尝试删除文件时崩溃。

尝试手动删除文件,它继续崩溃:

/home/site/wwwroot>ls -la libs/lxml
total 6868
drwxrwxrwx 2 nobody nogroup 4096 Oct 28 01:13 .
drwxrwxrwx 2 nobody nogroup 16384 Oct 28 01:23 ..
-rwxrwxrwx 1 nobody nogroup 304689 Oct 27 20:09 _elementpath.cpython-36m-x86_64-linux-gnu.so
-rwxrwxrwx 1 nobody nogroup 6704624 Oct 27 20:09 etree.cpython-36m-x86_64-linux-gnu.so
/home/site/wwwroot>rm -Rf libs
rm: cannot remove 'libs/lxml': Directory not empty
rm: cannot remove 'libs/newrelic/core': Directory not empty
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty

/home/site/wwwroot>rm -R libs
rm: cannot remove 'libs/lxml/etree.cpython-36m-x86_64-linux-gnu.so': No such file or directory
rm: cannot remove 'libs/lxml/_elementpath.cpython-36m-x86_64-linux-gnu.so': No such file or directory
rm: cannot remove 'libs/newrelic/core/_thread_utilization.cpython-36m-x86_64-linux-gnu.so': No such file or directory
rm: cannot remove 'libs/newrelic/packages/wrapt/_wrappers.cpython-36m-x86_64-linux-gnu.so': No such file or directory

我已经“停止”了该应用程序,但是文件仍然无法删除。

除了删除和重新创建应用程序外,我还需要哪些选项才能使应用程序再次运行?

编辑:我按照建议尝试使用 rm -rf代替,但是由于 -r-R是相同的选项,因此没有区别:
/home/site/wwwroot>ls -la libs
total 16
drwxrwxrwx 2 nobody nogroup 16384 Oct 28 01:23 .
drwxrwxrwx 2 nobody nogroup 0 Sep 10 03:51 ..
drwxrwxrwx 2 nobody nogroup 0 Oct 28 01:13 lxml
drwxrwxrwx 2 nobody nogroup 0 Oct 28 01:13 newrelic
/home/site/wwwroot>rm -rf libs
rm: cannot remove 'libs/lxml': Directory not empty
rm: cannot remove 'libs/newrelic/core': Directory not empty
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty

/home/site/wwwroot>rm -rf libs
rm: cannot remove 'libs/lxml': Directory not empty
rm: cannot remove 'libs/newrelic/core': Directory not empty
rm: cannot remove 'libs/newrelic/packages/wrapt': Directory not empty

我无法使用SSH选项,因为我使用 python:3作为容器(没有Azure自定义)。

我曾经(在此应用程序上)尝试过使用 container customized for Azuresource for which is here。容器所做的只是在应用启动过程中增加了启动SSH服务的额外步骤,因此似乎不太可能与当前故障有关。

编辑:我已经更新了应用程序以使用jaraco/python-azure容器(并修复了该容器中的错误)。我能够在很短的时间内通过SSH到应用程序容器,在其中尝试安装 lsof,但是在该命令完成之前,SSH连接显示断开,我怀疑是因为docker容器由于无法删除文件而退出。

此后,由于从webssh端点收到内部服务器错误,因此无法通过SSH重新连接:

internal server error in webssh

我尝试对容器使用其他启动文件 init_container.sh bash -c \"sleep 300\",以便在ssh加载它时可能会旋转5分钟,但是即使这样做,我也无法通过SSH进行连接,并且仅收到503错误webssh端点,即使在诊断控制台中,我也可以看到它使用适当的命令启动docker镜像。

我还尝试将启动文件更新为 init_container.sh rm -rf /home/site/wwwroot/libs/*,但是使用诊断控制台,我发现应用程序容器中发生了相同的错误:
2017-10-31 02:36:40.629 INFO - Issuing docker pull: imagename =jaraco/python-azure:latest
2017-10-31 02:36:40.668 INFO - Issuing docker pull: imagename =jaraco/python-azure:latest
2017-10-31 02:36:40.709 INFO - Issuing docker pull jaraco/python-azure:latest
2017-10-31 02:36:41.835 INFO - docker pull returned STDOUT>> latest: Pulling from jaraco/python-azure
Digest: sha256:589b1150b8b5893662a9dc7d0919e577cb2a95fcb0524fd1fffd7e5d8122b261
Status: Image is up to date for jaraco/python-azure:latest
2017-10-31 02:36:41.855 INFO - Starting container for site
2017-10-31 02:36:41.856 INFO - docker run -d -p 28374:80 --name APPNAME-dev_0 -e PORT=80 -e WEBSITE_SITE_NAME=APPNAME-dev -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=110c23d861dcaa09836ed00f278d29dc4b913a207c2d9dd4ed54366e3c2f6a3a -e HTTP_LOGGING_ENABLED=1 jaraco/python-azure:latest init_container.sh rm -rf /home/site/wwwroot/libs/*

2017-10-31 02:36:47.946 INFO - Container logs
2017-10-31T02:36:42.675769119Z Starting OpenBSD Secure Shell server: sshd.
2017-10-31T02:36:44.736417871Z rm: cannot remove ‘/home/site/wwwroot/libs/lxml’: Directory not empty
2017-10-31T02:36:45.596986651Z rm: cannot remove ‘/home/site/wwwroot/libs/newrelic/core’: Directory not empty
2017-10-31T02:36:45.649171980Z rm: cannot remove ‘/home/site/wwwroot/libs/newrelic/packages/wrapt’: Directory not empty
2017-10-31 02:36:47.947 ERROR - Container APPNAME-dev_0 for site APPNAME-dev has exited, failing site start

我失去了希望。还有其他选择吗?

编辑:将应用程序服务计划从S​​1更改为S2,向服务发出请求(触发移动),然后将应用程序切换回S1可以解决问题,但这只是暂时的。当工作日的一周晚些时候,该服务的流量重新开始时,它工作了一会儿,然后由于服务不可用而再次开始失败。检查日志,返回相同的错误。在启动过程中,应用程序尝试删除这些文件,但是由于显然这些文件正在使用中,因此删除和随后的启动步骤将失败。更糟糕的是,虽然上周似乎纠正了该问题,但更改App Service Plan似乎并不能解决此问题。此外,调整应用程序服务计划的大小虽然有效,但也具有意外的副作用,例如使该服务计划中的其他应用程序脱机。

我怀疑有关共享文件系统(安装在/home)的一些实现细节会导致打开的文件被锁定,从而无法通过部署过程或其他实例启动或手动删除。

我敢肯定,我唯一的选择是不对应用程序可能保持打开状态的任何文件(例如共享库)使用共享文件系统。

编辑:为了最小化该问题,我创建了 this web appdeployed it here。目前运行良好。我希望在将其闲置一段时间后将其刷新,随后的请求将触发它再次运行,并且将失败。我会报告是否有效。

编辑:我未能在新的Web应用程序中复制问题。我尝试将应用程序闲置24小时,以查看是否会触发该问题。我还尝试过显式降级“newrelic”依赖项(其中包含.so共享库之一),并启动和停止webapp再次触发“运行”脚本。但是无论我做什么,该应用程序都可以正常启动。我现在想我应该只是擦掉并重建失败的生产应用程序,然后看问题是否消失了。

最佳答案

在Kudu控制台中,您可以尝试SSH您的Web应用程序。您以root用户身份登录,可以删除这些文件和目录。

如果您不需要目录libs/lxml,建议您按照以下步骤删除。

cd /home/site/wwwroot/libs/lxml
rm -rf *
cd ..
rm -rf * ## rm -rf lxml
cd ..
rm -rf libs

更新:

调整应用服务计划的大小会将您的Web应用更改为其他主机,也许可以解决此问题。

关于linux - 无法删除共享文件系统中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46985440/

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