问题是: &字符能否保持ssh的session结束之后 一直 运行?
一直对搜这种特殊字符无能, Google了关键字 ssh Ampersand 换了几个描述也没找到想要的答案.搜到的基本全是怎么样nohup和&结合的描述
软件没有写成守护进程,但是还想后台运行, 一直以来用的是screen, 最近使用 "./app & " 这种方式启动,发现软件会退出, 所以想排除这种使用方式的问题.
1
wzxjohn 2015-01-26 16:49:25 +08:00 via iPhone 1
nohup 一起用确实可以,不过你有 screen 为何不用。。。一直都用 screen 的路过。。。
|
2
66450146 2015-01-26 16:51:16 +08:00 1
还是用 screen / tmux 吧……
|
3
kslr 2015-01-26 16:57:54 +08:00 2
& 大致意思是利用SHELL的技巧,新建不属于当前终端的进程,这样终端关闭的信号就不会影响到。
这里有一篇文章: http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ |
4
rrfeng 2015-01-26 16:59:09 +08:00 1
bash 默认设置 shopt huponexit 是 off 的。
所以 cmd & 可以一直后台运行,exit ssh 也没有影响。 但是,强行断开 ssh 连接,也就是非常规的 exit 比如网络断了之类的,还是会终止。 使用 nohup 执行,则异常断开也可以保持后台运行。 还有 setsid 和 disown 方式。 |
5
meta 2015-01-26 17:02:40 +08:00 1
如果你的程序不会向标准输出和错误输出写任何东西就可以一直运行,否则的话因为你已经把这两个输出关闭掉了,一般会出错退出。
你可以在程序内部处理,把这两个输出重定向,或者在shell中重定向。比如 > xxx.log 2>&1。如果用nohup的话,默认会重定向到nohup.out |
6
Tink 2015-01-26 17:08:10 +08:00 via iPhone 1
nohup command &
|
7
rrfeng 2015-01-26 17:22:08 +08:00 1
对,还有一个就是有些程序会判断 stdout/stderr 是否可用。否则会自行关闭。
方法是加上 &> /tmp/log 或者 /dev/null 重定向掉 |
8
whuhacker 2015-01-26 19:10:38 +08:00 1
pstree 查看一下进程树,就知道 ssh 进程下的子进程,在你断开 ssh 连接后都会被杀掉
而 screen / tmux 会把进程都挪出 ssh 的魔爪…… |
9
atupal 2015-01-26 19:23:33 +08:00 1
我一般都
$ (./xxx.sh 1>stdout.log 2>error.log & ) 然后就是在 后台运行且 挂到 init 进程下, 要看输出就 $ tail -f stdout.log 要看 错误就 $ tail -f error.log |
10
ryd994 2015-01-26 20:27:06 +08:00 via Android 1
其实还是screen好用啊
|