`

linux 后台任务console重定向到日记

 
阅读更多

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并且解决了两者缓冲区不一致的问题。

分享到:
评论

相关推荐

    redir_demo.zip_Console 重定向_DEMO_dos重定向_输出重定向_重定向

    在Windows操作系统中,控制台(Console)重定向是一项基础但重要的功能,它允许我们改变DOS命令或控制台应用程序的标准输入、输出和错误流。这个`redir_demo.zip`文件包含了一个DEMO,用于演示这一技术。让我们深入...

    14-1-RHEL7-Linux+输入输出重定向

    在Linux系统中,输入输出重定向是一种强大的工具,它允许用户改变命令的标准输入输出的方向。这表示可以在命令执行过程中指定不同的输入源和输出目标,而不是仅仅依赖于键盘和显示器这两种标准设备。了解并掌握输入...

    console-redirect:将控制台方法重定向到流

    例如,可用于将浏览器console重定向到process.stdout和process.stderr 。安装npm install console-redirect --save例子 var redirect = require ( 'console-redirect' )// redirect browser's console.log and ...

    配置linux的console口登录

    本文将详细介绍如何配置Linux系统以便能够通过串行线(console线)连接console口来登录后台。 #### 检查系统是否支持Serial 在开始配置之前,我们需要确认当前的Linux系统是否支持Serial通信。这通常可以通过检查...

    Linux后台运行命令

    之后可以通过`bg`命令将其恢复到后台继续运行。 - **nohup**: 使用`nohup`命令可以确保即使在用户退出登录后,命令仍然在后台继续运行。例如:`nohup command &` #### 三、`cron`与`crontab`命令 `cron`是Linux...

    为Linux系统配置serial console

    **Serial Console**是一种将计算机系统的控制台输出重定向到串行端口的技术。它允许管理员通过串行连接访问和控制服务器或嵌入式系统,即使在没有图形界面或网络连接的情况下也可以实现。对于远程管理和故障排除来说...

    将Linux系统的控制台定向到串口终端

    通过以上步骤,Linux系统就会将控制台输出重定向到串口终端,允许你在没有显示器的情况下通过串口设备进行交互,如登录、查看系统状态等。这种方法在没有物理访问设备或需要远程监控的场景中特别有用。请注意,不同...

    usb转console口 linux版本

    总之,USB转console口在Linux中的使用涉及到了硬件驱动、内核模块管理、终端工具配置等多个环节,是系统管理员必备的技能之一。正确配置后,可以方便地通过USB接口对各种串口设备进行控制和诊断。

    Linux驱动_串口和Console1

    在启动时,可以使用`console=ttyS1`参数告诉内核将控制台输出重定向到串口1(/dev/ttyS1)。 总之,Linux驱动中的串口和Console管理是操作系统与硬件交互的重要组成部分。理解它们的工作原理,以及如何进行初始化、...

    linux console printk 代码实现分析

    Linux内核的console和printk是两个紧密关联的重要组成部分。printk是Linux内核中的一种日志记录机制,用于记录内核消息,而console指的是内核通过哪个输出设备将这些消息显示出来。8250串口驱动是Linux内核中用于...

    嵌入式串口打印信息重定向到当前终端界面

    在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录到现场设备,想看程序的实时打印的调试信息,需要将输出到串口的调试信息重定向到当前登录的终端界面上。 也可以将程序重新启动到当前终端界面,但是在程序...

    linux定时任务.docx

    Linux 定时任务管理 Linux 定时任务是指在指定的时刻执行所需执行的任务,无论是在生活还是工作中,经常会碰到希望在某个时刻执行某个任务的情况,这时候就需要使用定时任务了。由于不能够人工的 24 小时围绕着电脑...

    ECSHOP 301重定向带动态页面跳转到静态页面插件

    6. **搜索引擎提交**:完成301重定向后,建议通过Google Search Console或Bing Webmaster Tools等工具,通知搜索引擎更新你的网址结构。 总之,ECSHOP 301重定向插件是提升ECSHOP网站SEO性能的重要工具。正确设置和...

    Linux console 下的专业编辑软件vim操作手册

    在进行Linux服务器管理里,使用编辑软件进行脚本编辑是必不可少的。可是对于很多习惯菜单、鼠标操作的管理者来说,实在是不习惯,也记不住那么多的命令。现在给你提供一个手册和学习案例。你可以在需要时查一查,在...

    VMware Remote Console 10.0.6 for Linux

    VMware Remote Console 可以实现控制台访问,以及客户端设备与远程主机上的虚拟机之间的连接。您将需要先下载此安装程序,然后才能直接从 VMware vSphere 和 vRealize Automation Web 客户端启动外部 VMRC 应用程序...

    301重定向301重定向301重定向

    301重定向是互联网行业中一个重要的概念,它关乎到网站优化、用户体验和搜索引擎排名等多个方面。简单来说,301重定向是一种HTTP状态码,表明网页已经永久性地转移到了新的URL。这个过程通常在网站改版、域名更换...

    qt程序在linux console模式下运行.pdf

    Qt 程序在 Linux Console 模式下运行 Qt 是一个跨平台的应用程序开发框架,它可以在多种操作系统上运行,包括 Linux。然而,在 Linux Console 模式下运行 Qt 程序有一些特殊的要求和配置。在这篇文章中,我们将...

    rocketmq-console后台管理jar包

    RocketMQ Console是一款基于Web的管理工具,用于可视化管理和监控RocketMQ集群。本压缩包提供的"rocketmq-console"包含了运行该控制台所需的文件和配置。 1. **RocketMQ Console** RocketMQ Console提供了一个友好...

    usb-console驱动

    在Linux、Windows等操作系统中,这种驱动程序扮演着至关重要的角色,它使得系统可以通过USB接口连接到串行设备,如远程控制设备或调试工具,进行控制台级别的通信。 在Linux环境中,USB-Console驱动通常涉及以下...

    console驱动

    3. **usb串口线產品驅動** - 这个文件名直译为"USB串口线产品驱动",很可能就是我们要找的console驱动程序本身,用于安装到用户的计算机系统中,以便使系统能够识别并正确处理通过USB连接的串口线设备。 **知识点...

Global site tag (gtag.js) - Google Analytics