我正在使用runuser执行python文件并将输出重定向到文件。这是命令:
runuser -l "user" -c "/path/python-script.py parameter1 > /path/file.log &"
这会正确运行python脚本,但会创建一个空的日志文件。如果我在没有重定向的情况下运行:
runuser -l "user" -c "/path/python-script.py parameter1 &"
正确运行python脚本并使python脚本的所有输出都流向屏幕。 python脚本的输出是通过 print 完成的,输出到stdout。
我不明白为什么python脚本的输出没有转储到文件中。文件权限是正确的。日志文件已创建,但未填充。
但是,如果我删除“parameter1”,那么python脚本报告的错误消息会被正确地转储到日志文件中:
runuser -l "user" -c "/path/python-script.py > /path/file.log &"
错误消息也是通过打印完成的,所以我不明白为什么会丢弃一条消息而其他消息没有。
也许runuser将“parameter1”解释为命令或其他东西。但是,参数正确传递给脚本,正如我在ps中看到的那样:
/usr/bin/python /path/python-script.py connect
我已尝试添加2>& 1但仍然无效。
有什么想法吗?
答案 0 :(得分:0)
在启动脚本中遇到类似的问题,我需要记录输出。最后我想出了以下内容:
USR=myuser
PRG=myprogrog
WKD="/path/to/workdir"
BIN="/path/to/binary"
ARG="--my arguments"
PID="/var/run/myapp/myprog.pid"
su -l $USR -s /bin/bash -c "exec > >( logger -t $PRG ) 2>&1 ; cd $WKD; { $BIN $ARG & }; echo \$! > $PID "
方便,因为您还可以获得该过程的PID。示例写入syslog,但如果要写入文件,请使用cat:
LOG="/path/to/file.log"
su -l $USR -s /bin/bash -c "exec > >( cat > $LOG ) 2>&1 ; cd $WKD; { $BIN $ARG & }; echo \$! > $PID "
它启动一个新的shell并将所有输出绑定到exec内的命令。