Java-程序以后台方式在Linux上运行

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!

一、预备

命令:

1
nohup java cn.aofeng.LoopApplication >Loop.log &

说明:

  • 将cn.aofeng.LoopApplication设置成后台运行,并且将标准输出的日志重定向至文件Loop.log。
  • nohup 表示不挂断运行,&表示以后台方式运行。

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 建立时间:2008-11-14
*/
package cn.aofeng;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author aofeng <a href="mailto:aofengblog@163.com">aofengblog@163.com</a>
*/
public class LoopApplication {
public static void main(String[] args) {
Format format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while(true) {
String date = format.format(new Date());
System.out.println("Current Time:" + date);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace(System.out);
}
}
}
}

二、实践

1、telnet 登陆到Linux,执行命令

1
nohup java cn.aofeng.LoopApplication >Loop.log &

[1] 11860

系统返回作业号(1)和进程号(11860)。

2、退出telnet,再重新telnet登陆到Linux。

3、查看当前目录

1
ls

cn Loop.log

结果显示已经在当前目录(app)下生成了日志文件Loop.log。

4、查看日志内容

1
tail -f Loop.log

Current Time:2008-11-14 10:59:03
Current Time:2008-11-14 10:59:04
Current Time:2008-11-14 10:59:05
Current Time:2008-11-14 10:59:06
Current Time:2008-11-14 10:59:07
Current Time:2008-11-14 10:59:08
Current Time:2008-11-14 10:59:09

日志显示程序正在运行,每秒向日志写入一行数据。

5、查看进程信息

1
ps -ef | grep java

1004 11860 11826 0 10:53 pts/4 00:00:00 java cn.aofeng.LoopApplication

三、附:nohup 命令

用途:不挂断地运行命令。

语法:

1
nohup Command [ Arg ... ] [ & ]

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

退出状态:该命令返回下列出口值:

  • 126 可以查找但不能调用 Command 参数指定的命令。
  • 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:

1
nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

1
nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。