在init.d脚本中使用Python的特殊注意事项?

jld*_*ont 9 python linux ubuntu init.d

'init.d'运行的脚本中使用Python有什么特殊注意事项init吗?(即启动Ubuntu)

根据我的理解,通过谷歌搜索/测试Ubuntu,提供给'init.d'脚本的环境变量很少,因此使用"#!/usr/bin/env python"可能不起作用.

还要别的吗?

Eva*_*oll 4

这恰恰凸显了 init.d 脚本中 python 的最大问题——增加了复杂性。

Python 没有规范,env 甚至不必指向 cpython。如果你升级后 python 崩溃了,你就只能咬紧牙关了。而且 python 崩溃的可能性比 sh (init.d 脚本的安全选择)要大得多。原因是,简单实用:

ecarroll@x60s:/etc/init.d$ ldd /usr/bin/python
    linux-gate.so.1 => (0xb7ff7000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7fc9000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fc5000)
    libutil.so.1 => /lib/tls/i686/cmov/libutil.so.1 (0xb7fc0000)
    libz.so.1 => /lib/libz.so.1 (0xb7faa000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7f84000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e21000)
    /lib/ld-linux.so.2 (0xb7ff8000)
ecarroll@x60s:/etc/init.d$ ldd /bin/sh
    linux-gate.so.1 => (0xb803f000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ec7000)
    /lib/ld-linux.so.2 (0xb8040000)

Python 正在链接到 libpthread、libdl、libutil、libz、libm 以及其他可能损坏的东西。Python 只是做得更多。

-rwxr-xr-x 1 根 86K 2008-11-05 01:51 /bin/dash
-rwxr-xr-x 1根根2.2M 2009-04-18 21:53 /usr/bin/python2.6

您可以在此处阅读有关环境变量具体讨论内容的更多信息: http://www.debian.org/doc/debian-policy/ch-opersys.html#s9.9 主要问题是默认值for env 可以在 /etc/profile 中设置,只有当脚本在支持读取脚本的 shell 下运行时才会运行。