重定向 stderr 后通过管道传输 bash 脚本的输出

重定向 stderr 后通过管道传输 bash 脚本的输出

由于我的托管服务商的工作方式,我必须使用系统来提供服务。

该服务有一个运行文件,它执行该文件并通过管道传输到第二个运行文件。但我使用(给定的)python 包记录到 stderr 而不是 stdout,我无法让它执行我想要的操作。

所以我有一个服务的运行脚本:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

它通过管道传输到日志系统的运行中:

#!/bin/sh
exec multilog t ./main

但管道没有连接 stderr (如预期)。因此,在谷歌搜索后,我在运行中附加了一个重定向:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1

但这并不能解决我的问题:我自己的输出(使用 python 打印到标准输出)按预期记录。不记录 stderr 输出。

如果我将修改后的运行脚本重定向到两个文件中,则表明没有重定向(stderr 仍在 stderr 上)。我必须如何修改重定向才能工作?

答案1

请尝试:

#!/usr/bin/env bash
exec 2>&1
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

即:exec 2>&1在单独的一行上,告诉将 stderr 重定向到 stdout 将要访问的相同内容(您的终端?或者邮件,如果在 crontab 中?),然后使用 cd 和 exec 将现有进程替换为 python3.2 进程。请注意,我改用 bash 而不是 sh,因为可移植性较低,但通常可靠性更好。如果这有效,那就太好了,如果不是的话,一些知识渊博的人会介入。(我现在没有时间对此进行研究)

相关内容