linux中报错“把输出追加到nohup.out”什么意思?

linux中报错“把输出追加到nohup.out”什么意思?,第1张

这不是报错,只是提示,后台执行程序的输出都被重定向到nohup.out文件

linux重定向及nohup不输出的方法:

一、linux重定向:

0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。

在一般使用时,默认的是标准输出,既1

当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。

另外,也可以实现0,1,2之间的重定向。

2>&1 将错误信息重定向到标准输出。

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。

如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:

ls 1>/dev/null 2>/dev/null

还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:

ls >/dev/null 2>&1

注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄:-)

由于使用nohup时,会自动将输出写入nohup.out文件中,如果文件很大的话,nohup.out就会不停的增大,这是我们不希望看到的,因此,可以利用/dev/null来解决这个问题。

(1)舍弃标准输出,将错误输出到log文件中

nohup node bin/www >/dev/null 2>log &

(2)如果错误信息也不想要的话:

nohup node bin/www >/dev/null 2>&1 &

注:其中node bin/www是项目node启动

二、关于重定向

1. 基本概念

a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;(FD:file descripter,文件描述符)

b、常用FD有3个,为: 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;

c、用 <来改变读进的数据信道(stdin),使之从指定的档案读进;

d、用 >来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;

e、0 是 <的默认值,因此 <与 0<是一样的;同理,>与 1>是一样的;

f、在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;

g、管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin

h、tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去

i、bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;

j、( )  将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。

k、exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除,。exec 在对文件描述符进行 *** 作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

2. 基本IO

cmd >file              把 stdout 重定向到 file 文件中

cmd >>file             把 stdout 重定向到 file 文件中(追加)

cmd 1>fiel             把 stdout 重定向到 file 文件中

cmd >file 2>&1         把 stdout 和 stderr 一起重定向到 file 文件中

cmd 2>file             把 stderr 重定向到 file 文件中

cmd 2>>file            把 stderr 重定向到 file 文件中(追加)

cmd >>file 2>&1        把 stderr 和 stderr 一起重定向到 file 文件中

cmd <file >file2       cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout

cat <>file              以读写的方式打开 file

cmd <file              cmd 命令以 file 文件作为 stdin

cmd <<delimiter        Here document,从 stdin 中读入,直至遇到delimiter 分界符

tee用于把命令结果打印在屏幕上并同时保存到文件。

tee用法

描述:从标准输入中读取并同时写入到标准输出和指定的文件上

选项:

    -a,--append:不覆盖,而是追加输出到指定的文件中

    -i,--ignore-interrupts:忽略中断信息

    若指定的输出文件为'-',则再次输出到标准输出上

实例:

    tee Example.txt #将标准输入中输入的内容同时输出到Example.txt和标准输出上

实践:

例如 ifconfig | tee ifconfig.log

查看iconfig.log

注:

标准输入一般有键盘和其它文件,标准输出有屏幕等。tee只能进行标准输入的输出,对于错误输入是不能输出的。

在调试脚本时,想要每个命令的执行过程都输出到屏幕或者文件中,以便后续查看,如何 *** 作呢?首先脚本第一行要写为“#!/bin/bash -x”,这样会把每个命令的执行记录都输出到屏幕,若还要输出到指定文件,要用到tee,但tee只能进行标准输入,对于标准输入和错误输入要用到下式:

./filename.sh 2>&1 | tee output.log   或者直接 bash -x ./filename.sh 2>&1 | tee output.log

今天调试一个bash,要把屏幕的输出结果存到log文件中,开始输入$bash -x ./test.sh >log 结果发现log里只存放了程序的执行结果,后来在cu的一篇帖子里http://bbs.chinaunix.net/viewthread.php?tid=264380&highlight=bash得到了启发,bash -x的调试信息是输出到2号流中的,所以解决方案为bash -x ./test.sh 2>&1 | tee log 想起以前要存放执行make的结果时也遇到类似问题,总结如下:

1、管道符的“I”的作用只是把前一个程序的标准输出流(stdout)的数据作为后一个程序的标准输入流stdin的数据,如不进行重定向,则其他输出流的信息是无法传给后面的程序的

2、屏幕得到的信息不一定是从程序的标准输出来的,也包括标准错误输出流stderr中的信息

3、有些程序(特别是象bash、make这样执行了其他程序的程序)的设计者为了省事,把一些正常情况的信息也放在stderr中输出(即使程序本身并无错误),而stdout用来输出被调用程序的执行时信息,造成了用户的误解简单编写了一下脚本,通过ssh登陆在命令行下运行正常,可是将脚本添加到crontab中就不正常。想记录一下输出信息,分析一下错误原因。将脚本通过使用>info.log 重定向输出,结果发现一些在命令行下可以看到的文本信息没有记录到info.log文件中,研究了一下,那些输出估计是输出到了标准错误上。

研究了一下通常添加命令后面几个输出含义

■ >/dev/null 输出到空设备,表示丢掉输出信息。

■ 2>&1将输出到标准错误的信息输出到标准输出设备(通常是屏幕)有3个默认的i/o,

■ 0是标准输入,一般是键盘

■ 1是标准输出,一般是屏幕

■ 2是标准错误,有时候屏幕上可以看到,但是重定向的文件中看不到的就是它了

答案是:

ls

-al

>>

record.txt

1、使用

“>>”

符号,

其实是使用了

管道;

2、">>"

前面

待写入文件

内容,

之后是

文件名字;

3、不加绝对路径时,

默认为当前

文件夹;

4、若不是

追加,

而是

覆盖,

就是

使用

“>”


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8486789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存