标签: stdout

如何查看 ansible 命令的标准输出?

如何查看 ansible-playbook 命令的标准输出?-v 只显示 ansible 输出,而不是单个命令。如果我能立即弄清楚如何执行此操作,那就太好了,因此如果出现故障或挂起,我可以了解原因。

例如

- name: print to stdout
  action: command echo "hello"
Run Code Online (Sandbox Code Playgroud)

会打印

TASK: [print variable] ******************************************************** 

hello
Run Code Online (Sandbox Code Playgroud)

debugging stderr stdout ansible

225
推荐指数
4
解决办法
43万
查看次数

有没有办法将输出重定向到文件而不在 unix/linux 上缓冲?

我有一个长时间运行的批处理进程,它将一些调试和进程信息输出到标准输出。如果我只是从终端运行,我可以跟踪“它在哪里”,但是数据会变得太多并从屏幕上滚动。

如果我重定向到输出到文件 '> out.txt' 我最终会得到整个输出,但它被缓冲了,所以我现在看不到它在做什么。

有没有办法重定向输出但使其不缓冲其写入?

unix stdout

59
推荐指数
5
解决办法
7万
查看次数

Windows:将 stdout 和 stderror 重定向到空

我有一个正在运行的命令会产生大量输出,我想在不写入文件的情况下使输出静音。我使用以下内容将所有输出发送到文件,但我又不想要任何文件输出:

command > out.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

我以前command > /dev/null在我的 CentOS 机器上使用过,但我在 Windows 上找不到类似的东西。

windows windows-7 windows-command-prompt stdout

47
推荐指数
1
解决办法
7万
查看次数

如何从 LFTP 捕获输出?(输出未写入 STDOUT 或 STDERR?)

我想从 lftp 访问进度信息。目前,我正在使用 curl ,如下所示:

curl http://example.com/file -o file -L 2> download.log
Run Code Online (Sandbox Code Playgroud)

这会将 curl 的进度信息写入 download.log 文件,我可以通过拖尾获取实时进度。

但是同样的方法不适用于 lftp,无论是 stdout 还是 stderr。我最终得到一个空的 download.log 文件,直到传输完成。

lftp -e 'get http://example.com/file;quit' 2> download.log
lftp -e 'get http://example.com/file;quit' 1> download.log
Run Code Online (Sandbox Code Playgroud)

当我不重定向输出时,我会在屏幕上看到进度。当我重定向输出时,我不再在屏幕上看到进度,但在 download.log 中没有显示任何内容。文件传输完成后,我看到了最终结果,就像这样 - 但之前什么都没有:

97618627 bytes transferred in 104 seconds (913.1K/s)
Run Code Online (Sandbox Code Playgroud)

lftp 是否对其输出做了一些不寻常的事情 - 打印到屏幕而不打印到 stdout/stderr?除了重定向 stdout/stderr 之外,还有其他捕获屏幕输出的方法吗?

ftp stderr curl stdout

14
推荐指数
1
解决办法
3万
查看次数

完全静音的robocopy

我正在尝试以静默方式自动复制一些文件。现在,我有 robocopy 将所有内容放入日志文件中,这很好,但完成后Log File: C:\<logfiledestination>会打印出来。我的命令如下所示:

robocopy source destination /mir /xd .svn /log:log.txt /np >nul 2>&1.

从网上搜索,我认为这>nul 2>&1会阻止任何东西出现。我对 Windows 命令行非常陌生,所以如果我做错了什么,请告诉我!

编辑:我在那里有一个幻影的半句我错过了。不过现在修好了。

silent robocopy stderr stdout

9
推荐指数
2
解决办法
3万
查看次数

无论如何让 msiexec 回显到标准输出而不是记录到文件

作为持续交付管道的一部分,我想在给定的机器上安装 msi。msiexec plus psexec 完美地做到了这一点,但似乎 msiexec 只能登录到一个文件,而我需要它登录到 stdout/stderr。

现在,为了将输出返回到我们的 CI 软件中,我必须添加第二个步骤来回显日志的内容,这似乎有点毫无意义。

有没有人以前遇到过这个问题(并克服了它?)

在此先感谢您的帮助。

标记

logging msi stderr stdout

8
推荐指数
1
解决办法
7169
查看次数

如何重定向已经运行的进程的 stdout/stderr?

(在 Ubuntu 10.04 64 位服务器上运行)

昨天,我犯了一个错误,即在没有使用 screen 的情况下通过 SSH 启动一个进程(我没有意识到这需要几天的时间才能运行)。我今天花了一整天的时间试图找出某种方法,我可以从 SSH 的铁腕中撬出进程的输出,以便我可以重新启动我的客户端机器,但没有任何进展。

我尝试使用 gdb 并按照本页底部的说明进行操作,但是当我运行第一个 gdb 命令来创建文件时,我收到一条错误消息,指出No symbol table is loaded. Use the "file" command. 根据我收集的内容,这意味着我必须重新编译其输出的程序我正在尝试重定向,这当然对我来说绝对没有帮助,因为它已经在运行。

我还认为我可以使用 retty 将输出重定向到另一个终端,但显然它不能在 64 位平台上编译。

如何将此进程的输出重定向到另一个终端或文件?

ubuntu process redirect stdout

7
推荐指数
1
解决办法
8594
查看次数

守护程序调用的前台程序是否应该根据严重性级别在 stderr 和 stdout 之间拆分日志记录?

通常日志消息写入 stderr。我想知道拆分日志消息是否是一个好主意/实践,以便错误和警告转到标准错误,而调试/信息/通知消息转到标准输出?或者这是否无关紧要,因为许多专用日志记录进程无论如何只能从 stdin 读取,这需要将 stderr 和 stdout 中的源日志消息组合起来并重定向到记录器的 stdin。

[更新]

下面的两个答案都提到了系统日志,我想我需要详细说明设置。

我询问的守护进程自己在前台运行。守护进程由监督进程管理,例如runitsupervisord。在这两种情况下,守护进程的 stderr 和 stdout 将被监督进程捕获,并且监督进程的工作是决定如何以及在哪里存储日志(可能是系统日志,或者通过 UDP 网络中的其他地方) . 守护进程不必担心写入日志的内容和位置,因为它们只是写入 stdout/stderr。

在 的情况下runit,其日志记录工具svlogd将从其 stdin 中读取重定向的日志消息,这些消息是托管守护进程的 stderr/stdout 组合。至于supervisord,它可以记录 stderr 和 stdout 以分隔日志文件。

因此,在这种特定设置中,在 stderr 和 stdout 之间拆分日志还是仅写入其中一个是一种好习惯?

logging daemon stderr stdin stdout

7
推荐指数
2
解决办法
910
查看次数

Docker 容器中的 SSHd 日志未通过“docker 日志”显示

使用时

CMD ["/usr/sbin/sshd", "-D"]
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 中,docker logs不显示日志记录:

cat > Dockerfile.stdout <<EOF
FROM alpine:latest
RUN    apk add --no-cache openssh-server \
    && mkdir /var/run/sshd \
    && ssh-keygen -A
CMD ["/usr/sbin/sshd", "-D"]
EOF

docker build -f Dockerfile.stdout -t sshd-stdout .

docker run --name sshd-stdout -d sshd-stdout

docker logs sshd-stdout
<empty>
Run Code Online (Sandbox Code Playgroud)

Docker主机是CentOS:

cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
Run Code Online (Sandbox Code Playgroud)

Docker 日志记录后端是日志记录:

grep ^OPTIONS /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 json 作为日志记录后端,但没有成功。

如何正确“转发”日志记录?


正如@marioavs 所建议的,“-e”是必要的。我尝试过“-e”和“-D”,但不同时尝试。所以:

cat > Dockerfile.stdout <<EOF
FROM alpine:latest
RUN    apk …
Run Code Online (Sandbox Code Playgroud)

ssh logging stdout docker

7
推荐指数
1
解决办法
1万
查看次数

systemd 进程 stdout/stderr

当我手动运行该服务时,它会在启动时记录一些内容。

但当它作为 systemd 进程启动时,我无法在任何地方找到该日志。

journalctl -u <service>只显示服务启动和停止的记录,不显示实际的服务输出。

我尝试将配置添加到/etc/systemd/system/<service>.service文件中:

StandardOutput=append:/var/opt/<service>/stdout.log
StandardError=append:/var/opt/<service>/stderr.log
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助 - 文件是在守护进程和服务重新启动后创建的,但它们是空的。

我缺少什么?

感谢您的任何建议,我没有想法。

logging stdout systemd

6
推荐指数
1
解决办法
9939
查看次数