我不是系统工程师(我是软件开发人员)。我必须运行 Java 应用程序(可运行。罐Linux 机器 (Centos 7) 上的 SSH 文件。我通过 SSH 连接到 shell。此应用程序位于罐格式化并实现批处理应用程序并且其本身包含其调度程序。
我必须在远程服务器的后台运行它,以便在退出 shell 之后它仍然运行。
我已执行此命令以便在后台运行我的应用程序:
java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar &
然后我点击了Ctrl+C在我的键盘上以便再次获得我的 shell 上的键盘提示。
这是第一个奇怪的行为:我再次获得 shell 提示符和插入命令的可能性,但如果应用程序记录某些内容,它会出现在 shell 上。为什么?我预计我的应用程序仍在后台运行。
无论如何,我现在在我的 shell 中提示此命令以检查我的应用程序是否正在运行:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23307 15.3 1.6 4871172 418980 pts/0 Sl 10:23 0:22 java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin 23522 0.0 0.0 112812 980 pts/0 S+ 10:25 0:00 grep --color=auto java
是的,我的应用程序似乎可以正确运行(第一个)。
然后我关闭与 shell 的连接,再次登录并再次执行上一个命令,但现在我得到了这个:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23919 0.0 0.0 112812 980 pts/0 S+ 10:27 0:00 grep --color=auto java
正如您所看到的,在我断开与 shell 的连接之后,当我进行新的登录时,我的批处理应用程序似乎没有运行(事实上我的作业应用程序没有运行)。
哪里出了问题?我遗漏了什么?有什么好方法可以在后台运行我的 java jar 批处理应用程序?
答案1
您需要在 shell 终止之前解除后台作业与 shell 的关联。
当你输入时command &
,系统会给你一个类似“[1] 25177”的job-id,其中1
是job-id。
你现在应该使用 放弃命令. 对于上面的例子,这将是:
disown 1
或者做所有的工作(因为你只有一份):
disown
有关详细信息,请参阅例如 Linux / Unix:disown 命令。