欧普家居设计家官网,徐州手机网站优化公司,php免费网站空间,汕头住房与城乡建设网站来源#xff1a;http://blog.chinaunix.net/uid-446337-id-94446.html 方式#xff1a; Unix/Linux下一般想让某个程序在后台运行#xff0c;很多都是使用 在程序结尾#xff0c;来让程序自动在后台运行。 比如我们要运行mysql在后台#xff1a;
/usr/local/…
来源http://blog.chinaunix.net/uid-446337-id-94446.html 方式 Unix/Linux下一般想让某个程序在后台运行很多都是使用 在程序结尾来让程序自动在后台运行。 比如我们要运行mysql在后台
/usr/local/mysql/bin/mysqld_safe --usermysql nohup方式: nohup 命令如果你正在运行一个进程而且你觉得在退出帐户时该进程还不会结束那么可以使用 nohup 命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup 就是不挂起的意思( no hang up)。
nohup 命令 用途不挂断地运行命令。 该命令的一般形式为nohup command 语法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.out 的文件中除非另外指定了输出文件
nohup command myout.file 21
在上面的例子中输出被重定向到 myout.file 文件中。 使用 jobs 查看任务。 使用 fg %n 关闭。 nohup 后台运行 nohup command 或者 nohup command 这之间的差别是带 的命令行即使 terminal终端关闭或者电脑死机程序依然运行。
但是我们很多程序并不象 mysqld 一样可以做成守护进程可能我们的程序只是普通程序而已一般这种程序即使使用 结尾如果终端关闭那么程序也会被关闭。为了能够后台运行我们需要使用 nohup 这个命令比如我们有个 start.sh 需要在后台运行并且希望在后台能够一直运行那么就使用 nohup
nohup /root/start.sh
在shell中回车后提示 [~]$ appending output to nohup.out 原程序的的标准输出被自动改向到当前目录下的 nohup.out 文件起到了 log 的作用。 nohup 重定向
nohup 把标准输出STDOUT和标准错误STDERR结果输出到 nohup.out 文件这个看似很方便但是当输出很大的时候nohup.out 文件会非常大或者多个后台命令的时候大家都会输出到 nohup.out 文件不利于查找结果和调试程序。 所以能够重定向输出会非常方便。下面要介绍标准输出标准输入 和标准错误了。
其实我们一直都在用。比如 ./command.sh output # 这其中的 就是标准输出符号其实是 1output 的缩写 ./command.sh 2 output # 这里的 2 就是将标准错误输出到 output 文件里。 # 而 0 则是标准输入了。
下面步入正题重定向后台命令
nohup ./command.sh output 21
解释前面的 nohup 和后面的 就不用解释了主要是中间的 21的意思 这个意思是把标准错误2重定向到标准输出中1而标准输出又导入文件output里面所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因那就归结为标准错误没有缓冲区而stdout有。 这就会导致 output 2output 文件 output 被两次打开而stdout和stderr将会竞争覆盖这肯定不是我门想要的.这就是为什么有人会写成 nohup ./command.sh output 2output出错的原因了
##########################
最后谈一下/dev/null文件的作用
这是一个无底洞任何东西都可以定向到这里但是却无法打开。
所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里./command.sh /dev/null 21 nohup 问题 但是有时候在这一步会有问题当把终端关闭后进程会自动被关闭察看 nohup.out 可以看到在关闭终端瞬间服务自动关闭。
有个操作终端时的细节 当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口然后通过在shell中输入exit来退出终端 而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端。 所以这时候会断掉该命令所对应的session导致nohup对应的进程被通知需要一起shutdown。 这个细节有人和我一样没注意到所以在这儿记录一下了。