在后台运行一个进程,linux ubuntu

时间:2012-11-19 09:20:24

标签: java linux shell ubuntu background

我想运行一个.jar文件,所以我所做的就是放“&”在命令的最后(实际上没有必要记录输出,我只希望能够从托管我的java程序的远程服务器断开连接,程序本身在完成后保存结果)

我按照以下方式执行,但它不会在后台运行,它让我等待:

java -Xmx72G -cp //home/arian/rapidminer/lib/rapidminer.jar com.rapidminer.RapidMinerCommandLine -f //home/arian/RMRepository/testRemote.rmp &

知道为什么它不起作用?

谢谢, 阿里安

4 个答案:

答案 0 :(得分:2)

你是什么意思"它让我等着#34;? RapidMinerCommandLine是否有机会从stdin或其他信息流中读取?

如果你想在后台运行一个进程断开与tty会话的连接,你应该使用nohup,例如:

nohup java -Xmx.... com.rapidminer.RapidMinerCommandLine &

(请记住最后的&!)

您可以在... 1> /dev/null之前添加&,以忽略所有stdout

您还可以考虑screen实用程序,该实用程序允许您断开并重新连接到会话,但这对于(半)交互式会话更有用。

(另外,你指定了相当大的最大堆大小?)

干杯,

答案 1 :(得分:2)

您可以使用JSVC,这是一个用于守护Java应用程序的实用程序

http://commons.apache.org/daemon/jsvc.html

它将为您提供一个var pid文件,对创建真正的启动/停止脚本非常有用。

编辑:其他解决方案,也许可以提供帮助

这是我在嵌入式系统上为Slackware Linux所做的一个非常古老的启动/停止脚本:

#!/bin/sh

application_start() {
  cd /usr/local/YOURHOME
  /usr/lib/java/bin/java \
        -Xmx72G \
        -classpath //home/arian/rapidminer/lib/rapidminer.jar \
        com.rapidminer.RapidMinerCommandLine \
        -f //home/arian/RMRepository/testRemote.rmp &
  echo -n "Starting App daemon:  $CMDLINE"
  ps -Ao pid,command | grep java | grep com.rapidminer.RapidMinerCommandLine | awk '{print $1}' > /var/run/app.pid
  echo
}

application_stop() {
  echo -n "Stopping DataBaseSynchronizerClient daemon..."
  kill `cat /var/run/DataBaseSynchronizerClient.pid`
  echo
  sleep 1
  rm -f /var/run/DataBaseSynchronizerClient.pid
  killall DataBaseSynchronizerClient 2> /dev/null
}

application_restart() {
  application_stop
  sleep 1
  application_start
}

case "$1" in
'start')
  application_start
  ;;
'stop')
  application_stop
  ;;
'restart')
  application_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac

答案 2 :(得分:2)

我不知道为什么它不起作用。在大多数炮弹中它确实应该。

无论如何,如果您打算断开连接,通常会发现只是将作业放在后台是不够的:断开连接将关闭控制台(这将打破许多程序,单独)并发送一个SIGHUP信号(这将导致任何程序退出)。

您应该考虑使用nohup来运行程序(使用&)。或者,如果您确实需要稍后返回并与该计划进行互动,那么screenbyobu可能更适合该法案。另一种选择可能是将任务添加到crontab

答案 3 :(得分:1)

我同意它应该可以正常工作,但我也遇到了在后台运行Java的问题。我的解决方案是使用screen实用程序(通常安装在大多数Linux发行版中),您可以在其中打开可以从中分离的shell。如果我记得很清楚这些命令是这样的(但也有一个好的联机帮助页)

screen -S myCustomName # runs a new shell called myCustomName
CTRL + D # detach from the current screen instance
screen -ls # list active screen instances
screen -r myCustomName # reattach to the screen instance.

希望它能解决你的问题。