nohup

来源:http://blog.chinaunix.net/uid-446337-id-94446.html

&方式:

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: 

        /usr/local/mysql/bin/mysqld_safe --user=mysql &

nohup方式:

 但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup: 

            nohup /root/start.sh & 

          在shell中回车后提示: 

          [~]$ appending output to nohup.out 

      原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

nohup问题:

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。

有个操作终端时的细节:当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

这个细节有人和我一样没注意到,所以在这儿记录一下了。

附:nohup命令参考 

nohup 命令 

  用途:不挂断地运行命令。 

  语法:nohup Command [ Arg ... ] [ & ] 

  描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。 

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 

  退出状态:该命令返回下列出口值: 

  126 可以查找但不能调用 Command 参数指定的命令。 

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。 

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。 

  nohup命令及其输出文件 

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。 

  该命令的一般形式为:nohup command & 

  使用nohup命令提交作业 

  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: 

  nohup command > myout.file 2>&1 & 

  在上面的例子中,输出被重定向到myout.file文件中。 

  使用 jobs 查看任务。 

  使用 fg %n 关闭。 

  另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。

来源:http://www.2cto.com/os/201301/185701.html

linux nohup命令详解

 

nohup命令及其输出文件 

     nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。 

一般都是在linux下nohup格式:   www.2cto.com  

nohup command 

或者 

nohup command & 

这之间的差别是带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上); 

它把标准输出(STDOUT)和标准错误(STDERR)结果输出到nohup.txt文件这个看似很方便,但是当输出很大的时候,nohup.txt文件会非常大,或者多个后台命令的时候大家都会输出到nohup.txt文件,不利于查找结果和调试程序。 

所以能够重定向输出会非常方便。下面要介绍标准输出,标准输入 和标准错误了。 

其实我们一直都在用,只是没有注意到,   www.2cto.com  

比如 

>./command.sh > output 

#这其中的>就是标准输出符号,其实是 1>output 的缩写 

>./command.sh 2> output 

#这里的2>就是将标准错误输出到output文件里。 

而0< 则是标准输入了。 

下面步入正题,重定向后台命令 

>nohup ./command.sh > output 2>&1 & 

解释:前面的nohup 和后面的&我想大家都能明白了把。 
 

主要是中间的 2>&1的意思 

这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,   www.2cto.com  

所以结果是标准错误和标准输出都导入文件output里面了。 

至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。 

这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的. 
 

这就是为什么有人会写成: 

nohup ./command.sh >output 2>output出错的原因了 

########################## 

最后谈一下/dev/null文件的作用 

这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 

所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1 

时间: 2024-10-20 13:46:34

nohup的相关文章

php守护进程 加linux命令nohup实现任务每秒执行一次

Unix中 nohup 命令功能就是不挂断地运行命令,同时 nohup 把程序的所有输出到放到当前目录 nohup.out 文件中,如果文件不可写,则放到 <用户主目录>/nohup.out 文件中.那么有了这个命令以后我们php就写成shell 脚本使用循环来让我们脚本一直运行下去,不管我们终端窗口是否关闭都能够让我们php 脚本一直运行下去. 马上动手写个 PHP 小程序,功能为每30秒记录时间,写入到文件 复制代码 代码如下: # vi for_ever.php #! /usr/loca

nohup不输出日志信息的方法及linux重定向学习

起因 最近使用nohup创建了一个后台进程,默认日志输出到了nohup.out文件中,程序跑起来也就没再管, 过了大约一周,发现硬盘空间不够了,于是查找原因,发现这个nohup.out文件已经到了70G了,导致硬 盘空间不足了. 解决方案 只输出错误信息到日志文件 nohup ./program >/dev/null 2>log & 什么信息也不要 nohup ./program >/dev/null 2>&1 & 知识补充,关于Linux的重定向 Linu

修复“正确操作nohup让程序始终在后台运行”中已发现的问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1406629 问题:"抚琴煮酒"(余洪春)在<构建高可用Linux服务器(第二版)>的第119页中写到"产生此问题的原因是:虽然Shell中提示了nohup成功,但还是需要按键盘上的任意键退回到Shell输入命令窗口,然后通过在Shell中输入exit来退出终端,而不是每次在nohup

Linux 任务控制(bg job fg nohup &amp;amp;)

一. 简介      Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务.因此在任务管理上也有别具特色的管理思想. 我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和bg 命令,让你轻松调度正在运行的任务.假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,挂起这个程序,然后可以看到系统提示: [1]+ Stopped /ro

深入了解nohup

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1407161 昨日写了一篇关于"nohup后台运行程序"文章(修复"正确操作nohup让程序始终在后台运行"中已发现的问题),今天帮助开发人员具体解决了一个问题. 注解: Dump为研发人员开发的程序: test.sh为测试nohup的脚本,脚本内容见20行-35行. 1 2 3 4 5

docker 容器 后台启动模式 启动时候启动的服务 如何进行 日志重定向,ENTRYPOINT [&amp;amp;quot;/usr/bin/python&amp;amp;quot;, &amp;amp;quot;nohup /ABC

问题描述 docker容器后台启动模式启动时候启动的服务如何进行日志重定向,ENTRYPOINT["/usr/bin/python","nohup/ABC.py>xxx.log&"]吗?该问题来自CSDNDocker技术交流群(303806405),由版主xinshubiao整理.

菜鸟学Linux命令:nohup命令启动程序

在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程,比较麻烦: 另一种方法是仍然用普通方法编程,然后用nohup命令启动程序: nohup <程序名> & 则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程). 使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整

【Linux&amp;Unix】使用nohup让程序永远后台运行

Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe --user=mysql & 但是加入我们很多程序并不象mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用 & 结尾,但是如果终端关闭,那么程序也会被关闭.但是为了能够后台运行,那么我们就可以使用nohup这个命令,比如我们有个test.php需要在后台运行

使用nohup让程序在远程主机后台运行

因为我购买的一个国外主机居然开放了Telnet权限,因此我也使用Telnet登录上去玩玩Linux,但发现一关闭窗口就自动和主机断开了,和Windows的终端不一样,所以就上网找啊找,找到了一个从后台一直运行某个程序的方法. Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql & 但是加入我们很多程序并不象mysqld一