我在脚本中有命令:
exec su -s /bin/sh -c 'exec "$0" "$@" | ts "[%Y-%m-%d %H:%M:%S]"' user -- test.python $FULLPATH &> log &
FULLPATH
测试Python文件的路径在哪里。通过此命令,我希望脚本的输出将带有ts
命令中的时间戳记写入日志文件。
实际上并没有发生,除了没有时间戳之外,输出的输出没有任何时间戳:
exec su -s /bin/sh -c 'exec "$0" "$@"' user -- test.python $FULLPATH | ts "[%Y-%m-%d %H:%M:%S]" &> log &
这也与前面的命令给出了相同的结果。
感谢您对为什么会发生这种情况的任何想法以及可能的解决方案。
使用exec
with&
没有什么意义(尽管这不会成为问题的根源),但这将不会节省任何额外的费用。对于管道组件,我只能看到它与zsh
外壳一起保存了一个分叉,但是仅当应用于最后一个管道组件(cmd1 | exec cmd2
,这意味着zsh
不再等待其他管道组件)时才可以看到。
在这里,您没有将python脚本stderr重定向到ts
,尽管您将其发送到log
文件。您可能想要:
su -s /bin/sh -c '
"$0" "$@" 2>&1 |
ts "[%Y-%m-%d %H:%M:%S]"
' user -- test.python "$FULLPATH" > log 2>&1 &
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句