让java 程序在后台运行怎么做?

CheneyWong 发布于 2016/05/03 16:20
阅读 647
收藏 0
不想用 nohup 或者借用 screen ,像 tomcat 那样(daemon 参数)是怎么实现的??
加载中
0
ddatsh
ddatsh
commons-daemon
1
Feng_Yu
Feng_Yu

nohup java -jar xxx.jar &> app.log &

如果在bash环境下运行,nohup可省略,因为这是bash的默认行为 —— 后台运行的程序默认忽略SIGHUP信号。

一旦当前shell退出,将无法使用fg命令将后台任务换到前台,只能ps aux | grep java或jps找到你的程序的pid,然后kill $pid杀掉进程

0
12叔
12叔
在docker 运行也可以啊 
0
兮风古道
兮风古道

tomcat在linux平台下实现后台的方式  是在命令后面加 "&" 符号

Feng_Yu
Feng_Yu
回复 @兮风古道 : 我的理解错误。细读了一下catalina.sh脚本,start参数确实是使用了&放后台执行。通过eval调用拼接的命令行,放后台执行。stop参数却不是调用kill命令(除非指定-force参数以及$CATALINA_PID变量)
兮风古道
兮风古道
回复 @Feng_Yu : 哦? 那是怎么实现的
Feng_Yu
Feng_Yu
并不是
0
阿信sxq
阿信sxq
分析下tomcat的代码,看看是怎么实现的
0
eechen
eechen
Linux上以守护进程daemon形式运行程序

Linux服务脚本(比如Nginx和Tomcat)经常使用命令start-stop-daemon运行进程.
另外可以使用nohup让进程在后台可靠运行.
基本知识:
0: stdin标准输入
1: stdout标准输出
2: stderr标准错误
command 2>errfile command的错误重定向到文件errfile
command 2>&1      command的错误重定向到标准输出
command 2>1       command的错误重定向到文件1
ls nothing 2>errfile
ls nothing 2>&1
ls nothing 2>1
下面是几个例子:
ping `hostname` 在用户退出终端(exit)时,终端会收到hup(hangup)信号从而关闭其所有子进程(比如这里的ping).
nohup的用途就是让提交的命令忽略hangup信号.
nohup的使用是十分方便的,只需在要处理的命令前加上nohup即可,标准输出和标准错误默认被重定向到nohup.out文件中.
一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名.
例子1:
nohup ping `hostname` & 标准输出和标准错误默认被重定向到nohup.out
nohup ping `hostname` >ping.log 2>&1 & 标准输出和标准错误默认被重定向到ping.log
nohup ping `hostname` >/dev/null 2>&1 & 标准输出和标准错误默认被重定向到/dev/null(其实就是丢弃输出)
ps -ef |grep ping 退出(exit)运行ping的终端,仍然可以看到ping在运行.
kill `pidof ping` 退出程序.
Feng_Yu
Feng_Yu
start-stop-daemon是debian/ubuntu下一个二进制程序,但在RHEL/centos是没有这个程序的,而是一个daemon函数
-1
哎码
哎码
windows中做成服务,LINUX中叫守护进程。可以百度一下楼上仁兄推荐的nohup,还有什么screen之类的都可以
返回顶部
顶部