Python sys.stdout不适用于init.d脚本

时间:2017-01-24 12:01:17

标签: python linux bash

我有一个非常简单的问题。一个以下面开头的python脚本:

import sys
sys.stdout = open("server.out", 'w')

如果我直接将此命令输入终端

python start_server.py &

它写入server.out文件。 如果我输入service tdserver start,则所有init.d脚本都会这样:

python start_server.py &

同样的命令,没有别的。然而,在这种情况下,标准输出不会写入server.out

为什么呢?没有进程锁定文件,确认脚本已使用ps -aux

停止

2 个答案:

答案 0 :(得分:2)

默认情况下,init.d服务的工作目录为/etc/init.d,请参阅How do I execute an arbitrary script with a working directory of the directory its in?

<强>解决方案:

  1. 在Python代码中使用绝对路径,如评论中所述。

  2. python start_server.py &启动Python脚本之前,请通过简单的cd /your/path/更改工作目录。

  3. 希望这有帮助!

答案 1 :(得分:2)

如评论中所述:

您在server.out写了current directory

current directory的{​​{1}}是/etc/init.d(如linusg所述)。

使用输出文件的绝对路径(到可写位置)将解决问题。