无法删除共享文件系统

时间:2017-10-28 01:35:14

标签: linux azure azure-web-sites azure-container-service azure-web-app-for-containers

在今天部署Linux App for Containers期间,该应用程序开始失败并且从未出现过。调查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 Azure source for which is here。该容器所做的就是在应用启动期间添加一个启动SSH服务的额外步骤,因此它似乎不太可能与当前的失败有关。

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

我已经无法通过SSH重新连接,因为我从webssh端点收到内部服务器错误:

internal server error in webssh

我尝试为容器使用不同的启动文件:init_container.sh bash -c \"sleep 300\",以便在我使用时可以旋转5分钟,但即使我这样做,我也无法通过SSH连接到它和我只收到来自webssh端点的503错误,即使在诊断控制台中,我也能看到它使用适当的命令启动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以解决问题,但仅限于暂时。在本周晚些时候,该服务有了更新的流量,它工作了一段时间,然后又开始失败,服务不可用。检查日志,同样的错误又回来了。在启动期间,应用程序尝试删除这些文件,但由于这些文件显然正在使用,删除和后续启动步骤将失败。更糟糕的是,改变应用服务计划,虽然它似乎在上周纠正了这个问题似乎不是一个充分的解决方法。此外,调整应用服务计划的大小虽然有效,但也会产生意想不到的副作用,例如使该服务计划中的其他应用脱机。

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

我非常确定我唯一的选择是不要将共享文件系统用于可能由应用程序打开的任何文件(例如共享库)。

修改:为了尽量复制问题,我创建了this web appdeployed it here。目前运行正常。我希望在将其闲置一段时间后,它会被刷新,后续请求将触发它再次运行,它将失败。我会报告它是否有效。

修改:我在新的网络应用中复制问题未能成功。我已经尝试将应用程序闲置24小时以查看是否会触发此问题。我也曾试图明确降级“新手”'依赖项(包含一个.so共享库),启动和停止webapp以触发“运行”。脚本再次。但无论我做什么,该应用程序启动都很好。我现在想我应该擦除并重建我失败的制作应用程序,看看问题是否消失。

1 个答案:

答案 0 :(得分:1)

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

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

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

更新

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