nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向
后台运行命令:nohup
nohup命令:nohup是不挂断的意思( no hang up)。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令忽略所有挂(SIGHUP)信号,可以在你退出帐户/关闭终端之后继续运行相应的进程。
该命令的一般格式为:
nohup yourcommand &
# yourcommand:启动对象命令。可以跟该命令需要的各种参数。
# &是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup与&结合起来,可以实现不挂断的后台运行。
实现屏幕输出记录到日志文件
nohup yourcommand 2>&1 &
# 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
# 2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到日志文件中。
如果希望将日志输出到别的文件中,可以增加一个文件路径参数。如下:
nohup yourcommand >myout.log 2>&1 &
其中myout.log是保存输出的文件名称;
这是一条在Linux/Unix系统下的命令,用于在后台运行一个命令并将输出重定向到一个文件中。下面对每个部分进行解释:
nohup: 这是一个命令,意为"no hang up",用于让命令在后台一直运行,即使用户退出登录或终端关闭。
yourcommand: 这是你要在后台运行的命令。
2>&1: 这个部分是将标准错误输出重定向到标准输出,也就是将命令的错误信息也输出到文件中。
&: 这个符号是将整个命令放入后台运行,以便你可以在终端中继续输入其他命令,而不用等待该命令执行完毕。
综合起来,这条命令的作用是在后台运行一个命令,并将命令的输出(包括标准输出和标准错误输出)重定向到一个文件中,同时不会受到用户退出登录或终端关闭的影响。
你可以在命令行中使用重定向符号
>
和2>
来将命令的输出(包括标准输出和标准错误输出)重定向到不同的文件中。例如,你可以使用以下命令来将标准输出和标准错误输出分别重定向到不同的文件中:
yourcommand > stdout.log 2> stderr.log
上述命令会将
yourcommand
命令的标准输出重定向到stdout.log
文件中,将标准错误输出重定向到stderr.log
文件中。如果你想要将标准输出和标准错误输出合并到一个文件中,可以使用
&>
重定向符号,例如:
yourcommand &> output.log
上述命令会将
yourcommand
命令的标准输出和标准错误输出合并到output.log
文件中。你也可以自定义输出文件的名称和路径,只需在重定向符号后面跟上文件名或文件路径即可。例如:
yourcommand > /path/to/stdout.log 2> /path/to/stderr.log
上述命令会将
yourcommand
命令的标准输出重定向到/path/to/stdout.log
文件中,将标准错误输出重定向到/path/to/stderr.log
文件中
实时监测日志输出内容命令:tail
tail 命令是nohup命令的好搭档。配合-f参数,可以实时监视向日志文件增加的信息。
tail -f myout.log
tail -f 等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F 等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
tailf 等同于tail -f -n 10,与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。
监测程序是否在正常运行中:ps 或者 ps -ux
ps命令也可以和nohup命令配合使用,用于显示当前进程 (process) 的状态。可以监视后台程序是否在正常运行中或者已经挂掉。
ps -ef|grep yourcommand # -ef 参数显示所有命令,连带启动时的命令行参数
欢迎关注微信:生信小博士
如果仅仅如此使用nohup命令的话,程序的输出会默认重定向到一个nohup.out文件下。如果我们想要输出到指定文件,可另外指定输出文件:
nohup ./test > myout.txt 2>&1 &
&
这种方法很简单,就是在命令之后加个“&”符号就可以了,如下:
./test &
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
./test >> out.txt 2>&1 &
2>&1是指将标准错误重定向到标准输出,于是标准错误和标准输出都重定向到指定的out.txt文件中,从此终端彻底清静了。
但是这样做要注意,如果Test程序需要从标准输入接收数据,它就会在那死等,不会再往下运行。所以需要从标准输入接收数据,那这种方法最好不要使用。
那现在程序在后台运行了,我们怎么找到它呢?很简单,有两种方法:
1. jobs命令
jobs命令可以查看当前有多少在后台运行。
jobs -l
此命令可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
2. ps命令
ps aux | grep test
nohup命令
在命令的末尾加个&符号后,程序可以在后台运行,但是一旦当前终端关闭(即退出当前帐户),该程序就会停止运行。那假如说我们想要退出当前终端,但又想让程序在后台运行,该如何处理呢?
实际上,这种需求在现实中很常见,比如想远程到服务器编译程序,但网络不稳定,一旦掉线就编译就中止,就需要重新开始编译,很浪费时间。
在这种情况下,我们就可以使用nohup命令。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
nohup ./test &
如果仅仅如此使用nohup命令的话,程序的输出会默认重定向到一个nohup.out文件下。如果我们想要输出到指定文件,可另外指定输出文件:
nohup ./test > myout.txt 2>&1 &
这样一来,多管齐下,既使用了nohup命令,也使用了&符号,同时把标准输出/错误重定向到指定目录下。
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。
相关文章
- linux启动进程报$’/r’: command not found错误详解程序员
- 深入理解Linux中的函数替换(linux函数替换)
- Linux下实现端口重定向的技巧(端口重定向linux)
- Linux系统下文件遗失的问题(linux看不到文件)
- Linux下查看文件的快捷方式(linux打开查看文件)
- Linux设备文件快速打开技巧(linux打开设备文件)
- 错误解决Linux系统U盘启动错误(linux修复u盘启动)
- Linux 后台服务开发——让你掌控网络世界(linux后台服务开发)
- Linux系统开机自动启用网络连接(linux开机启动网络)
- 从Windows7到Linux,改变一切的极致体验(预装linux改win7)
- Linux下使用View命令浏览文件(linux的view命令)
- 的磁盘Linux挂载服务器上的磁盘:实现轻松访问(linux挂载服务器上)
- Linux的发展之路:探索分支的精彩世界(linux的分支)
- 利用Linux实现网络注入的新方法(linux注入)
- 一个硬盘Windows 7与Linux共同使用硬盘的可能性(win7和linux共享)
- 如何在Linux上登录Redis?(linux登陆redis)
- Linux命令之如何查找并删除文件(linux找出文件并删除)
- Linux文件变化:从不变到无处不变(linux文件变化)
- Linux查看二进制文件:一招制敌(linux二进制查看文件)
- Linux下复制文件夹并重命名的简单方法(linux复制文件夹并重命名)
- Linux下如何查看进程号(linux 查进程号)
- Linux文件编码转换实践指南(linux文件编码)
- 拆开智能电视,Linux系统破解之旅(电视linux系统破解)
- 管理Linux文件管理简明指南(linux档案)