有人可以向我解释一下下面的 cron 作业中“2>&1”的含义是什么吗
0 23 * * * wget -q -O /dev/null "https://example.com/index.php" > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud) 我正在运行以下命令:
[user@server ~]$ /usr/sbin/ntpdate -d IPREMOVEDFORSECURITY | egrep 'transmit timestamp' | tail -1 | awk '{print $4, $5, $6, $7, $8}'
host found : HOSTREMOVEDFORSECURITY
Tue, Feb 15 2011 12:38:38.321
Run Code Online (Sandbox Code Playgroud)
所以问题是,无论我使用哪种类型的重定向,我总是得到“找到主机:”行。我尝试了以下方法:
0>/dev/null
1>/dev/null
2>/dev/null
2>&1
2>&/dev/null
Run Code Online (Sandbox Code Playgroud)
以及我能想到的或能够在网上找到的所有其他变体。我需要并希望返回的是该命令输出的第二行(时间戳)。我不明白为什么我似乎无法影响“主机找到:”行?!?!
我通过 perl 运行这些命令,但是在 bash 中直接运行它们时我看到了相同的行为。我需要抑制该 host: 行,因为在 perl 中,我使用反引号运行命令将输出分配给变量,并根据其他一些条件输出干净的响应。无论如何,该主机行显示并混淆了我的脚本输出,尽管它不会影响实际分配给变量的内容。
我的假设是这条线没有使用普通的 STDIN、STDOUT、STDERR 线程,但我似乎无法确定关于第 4 种输出方法的任何特定信息。我发现的每个网站都只谈论这三个。
如果有人对此有答案,请告诉我!
PS:这不是显示此行为的唯一命令,chkconfig 和其他一些命令也执行此操作,我真的很想弄清楚如何抑制这种不必要的输出。
我很困惑为什么这不起作用。
我试过使用“&>”和“2>&1”重定向STDOUT和STDERR,但似乎都不起作用。我仍然收到这个 cron 作业(每分钟!)的电子邮件,smbclient 抱怨共享中没有文件。
* * * * * smbclient //scanner/scan-import secretpass -U administrator -c "prompt; mget *; del *" &> /dev/null
Run Code Online (Sandbox Code Playgroud)
好奇:客户有一台旧的、昂贵的扫描仪,可以高速扫描多个文档——但该软件无法配置保存位置。他们不想将文档直接保存在旧的 XP 工作站上,所以我已经共享了保存位置并使用此 cron 作业自动将文档拉到他们的 linux 服务器上。
有没有办法stderr在应用程序完成后显示错误摘要(来自)?
例如,rsync使用“--progress”显示大量数据,包括错误。但是当它完成时 - 它只是说“有错误”。在这种情况下,我想显示写入 stderr 的所有内容,因此我不必滚动和搜索究竟出了什么问题:)
PS 我知道用 C 编写这样的实用程序是多么简单,但我想还有更多我不知道的方便的东西:)
我有用语言编写的应用程序Go并且它运行在screen
(我认为问题与Go语言无关。我相信它使用STDOUT和STDERR)
screen -S log_server -d -m go run log_server.go 2 > err3.txt 1 > std3.txt
Run Code Online (Sandbox Code Playgroud)
当它崩溃时,我在屏幕中写入错误,而不是在err3.txt或std3.txt
screen 不滚动并且不允许我阅读完整错误。
std3.txt工作正常
err3.txt,大小为 0 并打印错误screen(我可以看到最后 20 或 30 行)应用程序每 3 或 5 天崩溃一次。