[怪事] 直接在执行命令可以,写到脚本里就失败

2017-07-29 09:00:23 +08:00
 koebehshian

最后遇到一个怪事,直接在命令行中启动某个程序是可以的,把这句命令写到脚本里,再执行脚本就失败了。

这句命令是启动一个占 64%内存的 python 程序(嵌入式环境,内存一共才 64 兆),这个脚本是看门狗,检测到挂了后就重启它。从内存来看,确实比较紧张,只看可用内存是不够的,加上缓存可能够了。

现在我把脚本里的命令改成 sh -c 'xxxxx' 就启动成功了。

是直接在脚本里执行权限低吗,为什么开 shell 执行就成功了

3595 次点击
所在节点    Linux
14 条回复
kiwi95
2017-07-29 09:07:35 +08:00
命令直接写到脚本里是不能执行还是执行失败?加 sh -c 就执行了,感觉是没有 x 权限
koebehshian
2017-07-29 09:12:24 +08:00
@kiwi95 应该有的,我用 top 命令看着它起来,又挂掉,看起来像是内存不够。
wweir
2017-07-29 09:15:00 +08:00
有问题,贴日志,靠猜没意思
choury
2017-07-29 09:21:12 +08:00
默认 shell 不是 sh ?占用内存比 sh 多?
widewing
2017-07-29 09:49:32 +08:00
引号问题?
eyp82
2017-07-29 10:02:05 +08:00
检查系统日志和你的程序的错误打印, 尝试用 strace 之类跑一下.
koebehshian
2017-07-29 10:21:11 +08:00
@widewing 如果这么简单我不会发帖了。感觉是内存不够的问题,因为我用 top 命令看着它起来又挂掉。奇怪的是,用 sh -c 'xxxx'就能申请到内存
koebehshian
2017-07-29 10:23:31 +08:00
@choury 这与什么 shell 没关系,我就是 python xxx.py 2> /dev/null > /dev/null &这样启动的,就失败了,不是马上挂掉,是启动到一半内存不够挂掉。改成 sh -c 'python xxx.py 2> /dev/null > /dev/null &'这样就能成功
koebehshian
2017-07-29 10:25:24 +08:00
@eyp82 不是说一次没成功过,所以程序没有问题,就是内存申请不到挂的,就是用 shell 来执行可以申请到内存
fxxkgw
2017-07-29 11:32:05 +08:00
python xxx.py 2> /dev/null > /dev/null & 出错重定向到 /dev/null 也不是这种写法吧。。
可以尝试把脚本注掉 里面就只执行一个加了 sleep 的循环打印 这种几乎不怎么吃内存 看打印正常吧
如果正常 说明程序执行环节没问题 是内存太少导致的
koebehshian
2017-07-29 11:54:48 +08:00
@fxxkgw 内存确实少了,正常启动一般需要 64%的内存,而我启动前看了下只剩 50%的可用内存了,但加上 buffer,cached 之类的估计够了,问题是:直接 python xxx.py 2> /dev/null > /dev/null &这样启动,启动到一半内存不够挂掉。改成 sh -c 'python xxx.py 2> /dev/null > /dev/null &'这样就能成功。
firefox12
2017-07-29 14:25:34 +08:00
dmesg 里看有没有 ooo
sylecn
2017-07-30 10:28:00 +08:00
内存一共才 64M。有没有配置 swap ?
检查一下 kernel log,看看有没有 oom kill。
另外测试的时候不要重定向 stdout stderr,不然你都看不到出错信息。

sh 启动方式只会比直接启动更费内存,不可能更节省。除非 sh 启动时根本就没启动真正的 python 应用,比如 path 或者参数设置有问题之类的。
koebehshian
2017-07-31 08:21:12 +08:00
@sylecn 外存比内存还小,而且据说读写次数有限。有没有配置 swap 我没注意到。
由于外存小,日志好像都放在 tmp 里面。
在前台运行过,没有出错,后台运行才重定的。

肯定启动了,我用 top,ps 命令看过,而且进程 id 也一直不变,说明没重启

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/378766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX