freebsd 中 nohup使用时出现的奇怪问题
【现象】
在freebsd中启动rails网站;
网站的启动写到一个bat脚本中:
#/glodon/WEB_APP/CONF/rails_svnms.bat #!/bin/sh cd /glodon/WEB_APP/SVNMS /usr/local/bin/rails s mongrel -e production -b 127.0.0.1
利用nohup启动网站: nohup /glodon/WEB_APP/CONF/rails_svnms.bat &
成功生成job, 但是没有生成nohup.out文件, 重定向也不管用(nohup /glodon/WEB_APP/CONF/rails_svnms.bat 2>1& &), 日志输出到屏幕上,网站能够正常访问。
但是窗口一旦logout或者关闭, 网站就不能访问了, 后台有rails进程仍然正常运行,能够检测到日志变化,就是网站无法访问。
总不能一直开着窗口吧,郁闷了一上午~~~~~~~~~~~~
【原因】
我执行的是一个脚本文件,它里面还调了各种执行文件和应用程序,而且它里面调程序都没用用nohup &这种方式的,原因就处在这。
原因应该是这样,由于脚本中调用的脚本未加后台符(&)运行时需要另外调用一个新的Shell作为运行环境,而这个Shell却无法屏蔽父Shell退出时发出的quit signal,所以会导致进程被杀死,解决方法就是加后台符,这样进程运行无需启用新的Shell。
【解决方案】
把脚本里面把所有的地方都加上&,并把输出重定向到文件
即:
#/glodon/WEB_APP/CONF/rails_svnms.bat #!/bin/sh cd /glodon/WEB_APP/SVNMS /usr/local/bin/rails s mongrel -e production -b 127.0.0.1 >> log/production.log 2>&1 &