如何查看 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) 如何在不通过管道传输标准输出流的情况下传输标准错误流?
我知道这个命令有效,但它也会写出标准。
Command 2>&1 | tee -a $LOG
Run Code Online (Sandbox Code Playgroud)
我如何得到标准错误?
注意:我想要的是将 stderr 流写入日志并将 stderr 和 stdout 写入控制台。
我从 cronjob 运行它:
tar -czvf /var/backups/svn.tgz /var/svn/*
Run Code Online (Sandbox Code Playgroud)
这会在 stderr 上生成:
tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)
我想避免这种情况,因为这不是真正的错误(对我来说!)。我只想要在 stderr 上我应该担心的事情?
我怎样才能杀死那个消息?
我感觉这是使用 tar -C 选项的问题,但我不确定,也不知道如何使用。
谢谢你的帮助,
丹
我想从 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 之外,还有其他捕获屏幕输出的方法吗?
我正在尝试以静默方式自动复制一些文件。现在,我有 robocopy 将所有内容放入日志文件中,这很好,但完成后Log File: C:\<logfiledestination>会打印出来。我的命令如下所示:
robocopy source destination /mir /xd .svn /log:log.txt /np >nul 2>&1.
从网上搜索,我认为这>nul 2>&1会阻止任何东西出现。我对 Windows 命令行非常陌生,所以如果我做错了什么,请告诉我!
编辑:我在那里有一个幻影的半句我错过了。不过现在修好了。
作为持续交付管道的一部分,我想在给定的机器上安装 msi。msiexec plus psexec 完美地做到了这一点,但似乎 msiexec 只能登录到一个文件,而我需要它登录到 stdout/stderr。
现在,为了将输出返回到我们的 CI 软件中,我必须添加第二个步骤来回显日志的内容,这似乎有点毫无意义。
有没有人以前遇到过这个问题(并克服了它?)
在此先感谢您的帮助。
标记
我有一个 Sinatra 应用程序,我使用ruby app.rb. 通过 ssh 在远程机器上部署它时,如何在后台运行它并将 stdout 和 stderr 重定向到日志文件?
在重新启动时,我想保留以前的日志,以便将较新的消息附加到现有的日志文件中,而不是截断它。
将我的 Web 应用程序作为守护程序运行的推荐方式是什么?
我试过了nohup ruby app.rb &,但似乎缺少 stderr 并且在某些情况下日志语句似乎乱序。
通常日志消息写入 stderr。我想知道拆分日志消息是否是一个好主意/实践,以便错误和警告转到标准错误,而调试/信息/通知消息转到标准输出?或者这是否无关紧要,因为许多专用日志记录进程无论如何只能从 stdin 读取,这需要将 stderr 和 stdout 中的源日志消息组合起来并重定向到记录器的 stdin。
[更新]
下面的两个答案都提到了系统日志,我想我需要详细说明设置。
我询问的守护进程自己在前台运行。守护进程由监督进程管理,例如runit或supervisord。在这两种情况下,守护进程的 stderr 和 stdout 将被监督进程捕获,并且监督进程的工作是决定如何以及在哪里存储日志(可能是系统日志,或者通过 UDP 网络中的其他地方) . 守护进程不必担心写入日志的内容和位置,因为它们只是写入 stdout/stderr。
在 的情况下runit,其日志记录工具svlogd将从其 stdin 中读取重定向的日志消息,这些消息是托管守护进程的 stderr/stdout 组合。至于supervisord,它可以记录 stderr 和 stdout 以分隔日志文件。
因此,在这种特定设置中,在 stderr 和 stdout 之间拆分日志还是仅写入其中一个是一种好习惯?
自从我开始使用产生长调用链的 PHP 库以来,调试由它引起的问题变得越来越困难,因为我的错误日志最终包含如下输出:(某些值已使用 被清空*)
2017/08/23 10:47:26 [error] 13057#13057: *206119 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught ActiveRecord\DatabaseException: PDOException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "" in /var/www/********/vendor/php-activerecord/php-activerecord/lib/Connection.php:337
Stack trace:
#0 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Connection.php(337): PDOStatement->execute(Array)
#1 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Table.php(237): ActiveRecord\Connection->query('SELECT * FROM "...', Array)
#2 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Table.php(219): ActiveRecord\Table->find_by_sql('SELECT * FROM "...', Array, false, NULL)
#3 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Model.php(1666): ActiveRecord\Table->find(Array)
#4 /var/www/********/vendor/php-activerecord/php-activerecord/lib/Model.php(1605): ActiveRecord\Model::find_by_pk('', Array)
#5 /var/www/********/includes/classes/Models/NSModel.php(11): ActiveRecord\Model::find(''" while reading response header from upstream, client: **.***.***.***, server: ***********, request: …Run Code Online (Sandbox Code Playgroud)