LinuxShellnohup命令⽤法(内含代码演⽰)
⼀、Linux Shell nohup命令⽤法
在应⽤Unix/Linux时,我们⼀般想让某个程序在后台运⾏,于是我们将常会⽤ & 在程序结尾来让程序⾃动运⾏。⽐如我们要运⾏mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程序并不想mysqld⼀样,这样我们就需要nohup命令,怎样使⽤nohup命令呢?这⾥讲解nohup命令的⼀些⽤法。
nohup /root/start.sh &
在shell中回车后提⽰:
[~]$ appending output to nohup.out
原程序的的标准输出被⾃动改向到当前⽬录下的nohup.out⽂件,起到了log的作⽤。
但是有时候在这⼀步会有问题,当把终端关闭后,进程会⾃动被关闭,察看nohup.out可以看到在关闭终端瞬间服务⾃动关闭。
咨询红旗Linux⼯程师后,他也不得其解,在我的终端上执⾏后,他启动的进程竟然在关闭终端后依然运⾏。
在第⼆遍给我演⽰时,我才发现我和他操作终端时的⼀个细节不同:他是在当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 参数指定的命令不可调⽤。如果标准错误是⼀个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的⽂件描述符。
退出状态:该命令返回下列出⼝值:
linux mysql教程视频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上传和下载,这样就可以利⽤这些命令在后台上传和下载⽂件了。⼆、Linux nohup命令详解
nohup命令及其输出⽂件
今天在linux上部署wdt程序,在SSH客户端执⾏./start-dishi.sh,启动成功,在关闭SSH客户端后,运⾏的程序也同时终⽌了,怎样才能保证在推出SSH客户端后程序能⼀直执⾏呢?通过⽹上查资料,发现需要使⽤nohup命令。
完美解决⽅案:nohup ./start-dishi.sh >output 2>&1 &
现对上⾯的命令进⾏下解释
⽤途:不挂断地运⾏命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运⾏由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使⽤ nohup 命令运⾏后台中的程序。要运⾏后台中的 nohup 命令,添加 & ( 表⽰“and”的符号)到命令的尾部。
操作系统中有三个常⽤的流:
0:标准输⼊流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
⼀般当我们⽤ > ,实际是 1&的省略⽤法;< ,实际是 0 <
t的省略⽤法。
下⾯步⼊正题:
nohup ./start-dishi.sh >output 2>&1 &
解释:
1. 带&的命令⾏,即使terminal(终端)关闭,或者电脑死机程序依然运⾏(前提是你把程序递交到服务器上);
2. 2>&1的意思
这个意思是把标准错误(2)重定向到标准输出中(1),⽽标准输出⼜导⼊⽂件output⾥⾯,所以结果是标准错误和标准输出都导⼊⽂件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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论