这恰恰凸显了 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 下运行时才会运行。