Lnux 后台任务console重定向到日志
摘自:http://hi.baidu.com/hwyawekerrfhlve/item/e80c3be119f2a32c5a7cfbeb
今天在公司服务器上跑程序,用SSH连接上服务器,输入sh auto.sh命令执行,程序开始运行,但是关掉SSH程序终止运行。
记得以前可以在最后加上一个“&”,程序会在后台运行。尝试了一下,输入:sh auto.sh &。运行ps -ef,发现进程在运行,关掉SSH,再打开,输入ps -ef,进程仍然存在。:-)
不过有个问题:程序会在运行中输出日志,并是通过java的日志类进行输出的。而如果关掉SSH运行程序,就会丢失这些信息。直观的解决办法是将输出到控制台的日志重定向到文件中,于是我将命令改为:sh auto.sh > console.txt &。不过事实并没像我想的那样,console.txt虽然被创建了,而日志并没有写在其中。后来请教Robert Chen,他让我用sh auto.sh >console.txt 2>&1 & 命令试一下,我输入了这个隐晦的命令之后,原本输出到控制台的日志内容终于被重定向到console.txt了。
下面来详细分析一下这条命令:
sh auto.sh 运行shell脚本
>console.txt 将标准输出重定向到console.txt文件中
其实操作系统有三个常用的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。
java的日志类默认是输出到system.err中,所以要想将日志内容重定向到console.txt,需要将stderr重定向到console.txt.
将stderr重定向到console.txt的命令是 2 < console.txt。
不过有个问题,stdout是有缓冲的,而stderr是没有缓冲的,原因很简单,stderr一般是系统发生错误,比如编译一个程序出错,需要立即给出编译错误提示。
所以如果写成 sh auto.sh > console.txt 2 > console.txt就会出现问题。
再来看看 >& 操作符:
重定向操作符 描述
>
将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。
<
从文件而不是从键盘或句柄读入命令输入。
>>
将命令输出添加到文件末尾而不删除文件中已有的信息。
>&
将一个句柄的输出写入到另一个句柄的输入中。
<&
从一个句柄读取输入并将其写入到另一个句柄输出中。
|
从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。
而句柄的定义就是:
句柄 句柄的数字代号 描述
STDIN
0
键盘输入
STDOUT
1
输出到命令提示符窗口
STDERR
2
错误输出到命令提示符窗口
UNDEFINED
3-9
句柄由应用程序单独定义,它们是各个工具特有的
所以 2 >& 1就是把 stderr重定向到stdout 由于stdout被重定向到 console.txt,所以最终stderr,stdout均被重定向到console.txt并且解决了两者缓冲区不一致的问题。
相关推荐
例如,可用于将浏览器console重定向到process.stdout和process.stderr 。安装npm install console-redirect --save例子 var redirect = require ( 'console-redirect' )// redirect browser's console.log and ...
在WINDOWS上重定向DOS程序或CONSOLE程序的输入和输出。
配置linux系统配置,使得linux可以通过console线连接console口来登录后台。
14-1-RHEL7-Linux+输入输出重定向,在实际的 Linux 维护中,可以改变输入输出内容的方向. 不使用默认的标准输入输出设备,即重定向.
USB-serial controller驱动 usb到console口的转接器驱动,连接路由器交换机时可能需要转接 这是linux版本
在进行Linux服务器管理里,使用编辑软件进行脚本编辑是必不可少的。可是对于很多习惯菜单、鼠标操作的管理者来说,实在是不习惯,也记不住那么多的命令。现在给你提供一个手册和学习案例。你可以在需要时查一查,在...
VMware Remote Console 可以实现控制台访问,以及客户端设备与远程主机上的虚拟机之间的连接。您将需要先下载此安装程序,然后才能直接从 VMware vSphere 和 vRealize Automation Web 客户端启动外部 VMRC 应用程序...
VMware Remote Console 10.0.2 for Linux 虚拟机 VMRC
console tty uart初始化 console注册 read write串口 串口0和串口1驱动改用串口1做打印。
可利用本方法在没有源码的情况下,将console程序的标准输出重定向到自己的程序中来。网上很多关于此类方法的描述,经实验大多在标准Unix和Linux上可用,有个别在VC2010通过匿名管道方式可用,但在VS2015的CRT运行时...
翻译的文档,如何为Linux系统配置serial console,比较全面的说明。
直接解压,修改application.properties文件中命名服务器地址为自己的地址,执行java -jar app.jar 运行即可
console线的驱动,安装即可使用。1:全新界面,清爽,简单,高效 2:性能越来越好
对linux下8250串口驱动和console口实现方法及printk实现进行代码分析 内核版本2.6
VMware Remote Console 可以实现控制台访问,以及客户端设备与远程主机上的虚拟机之间的连接。您将需要先下载此安装程序,然后才能直接从 VMware vSphere 和 vRealize Automation Web 客户端启动外部 VMRC 应用程序...
功能:把命令行程序的输出重定向到剪贴板。用来做演示文档,PPT等非常有用。自用程序,做的很简单,没有容错,请别见怪。 用法:[command] [option]|cmd2cb 例如:dir|cmd2cb 会把dir的输出都重定向到剪贴板,...
qt程序在linux console模式下运行.pdf
启动安装启动后台管理界面: 安装tomcat,然后将rocketmq_console(监控mq的管理界面,放tomcat下启动就OK).tar部署到tomcat下启动即可。
对linux如何在console顶部显示当前时间的设置。