首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在优化的Google容器操作系统上运行可执行外壳脚本

无法在优化的Google容器操作系统上运行可执行外壳脚本
EN

Stack Overflow用户
提问于 2018-02-28 20:08:20
回答 4查看 6.2K关注 0票数 13

在任何其他linux发行版上,我都可以创建一个带有shebang的文件,并运行shell脚本,如下所示:

代码语言:javascript
复制
$ chmod +x test.sh
$ ./test.sh Johnny
hello Johnny

但是在Google平台容器优化操作系统上,我得到了-bash: ./test.sh: Permission denied

如果我以sh (例如sh test.sh Johnny )作为前缀,它就会起作用。我怎么才能让这个正常工作?

代码语言:javascript
复制
$ cat test.sh
#!/usr/bin/env sh

echo "Hello $@"

matt@rancher-4mmm /tmp/matt $ chmod +x test.sh 
matt@rancher-4mmm /tmp/matt $ sh ./test.sh matt
Hello matt

matt@rancher-4mmm /tmp/matt $ ./test.sh matt
-bash: ./test.sh: Permission denied
matt@rancher-4mmm /tmp/matt $ ls -la
total 4
drwxr-xr-x  2 matt matt  60 Feb 28 20:00 .
drwxrwxrwt 14 root root 280 Feb 28 19:59 ..
-rwxr-xr-x  1 matt matt  35 Feb 28 20:00 test.sh
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-10 18:33:24

COS节点上的大多数文件系统都使用"noexec“标志挂载,因此不能从它们执行二进制文件。

一些解决办法:

  • 对于脚本,使用脚本作为参数"bash /path/script.sh“、"python /path/app.py”调用解释器。
  • 在/mnt/ disk下挂载额外的数据磁盘。您可以在没有"noexec“标志的情况下挂载它。使用启动脚本在启动时挂载。
票数 18
EN

Stack Overflow用户

发布于 2018-03-01 01:20:12

容器优化的OS挂载带有" noexec“标志的文件系统,除了”在可写位置中,只有/var/lib/docker和/var/lib/cloud被挂载为“可执行”(即没有noexec挂载标志)“[1]。您可以使用以下命令进行验证:

代码语言:javascript
复制
mount | grep noexec

有关容器优化OS (COS)文件系统布局的更多信息,请参阅文档。“noexec”选项不允许在挂载的文件系统上直接执行任何二进制文件。这是因为默认情况下COS上的安全锁定实现。

票数 6
EN

Stack Overflow用户

发布于 2019-06-16 06:22:46

如果您想一次性运行二进制文件,并且不想处理另一个PD,也可以安装tmpfs设备并从那里运行它。

代码语言:javascript
复制
sudo mkdir /mnt/disks/scratch
sudo mount -t tmpfs tmpfs /mnt/disks/scratch/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49037720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档