在 Linux/Unix 系统中,nohup java -jar 是常用的后台启动 Java 应用的命令,其标准格式通常为 nohup java -jar your-app.jar > nohup.log 2>&1 &。下面详细解析其各部分及操作方法和注意事项:
命令各部分详解
nohup:该命令用于忽略挂起信号(SIGHUP),当用户退出终端或者终端被关闭时,正在运行的程序不会受到影响而继续在后台运行。java -jar your-app.jar:这是执行 Java 应用程序的核心部分。java -jar是 Java 提供的用于运行可执行 JAR 文件的命令,your-app.jar需要替换为实际要运行的 JAR 文件的名称。> nohup.log:这是输出重定向操作。它将命令的标准输出(stdout)重定向到指定的nohup.log文件中。也就是说,程序运行过程中产生的正常输出信息不会显示在终端屏幕上,而是被写入到nohup.log文件里。如果不指定文件名,默认会在当前目录创建nohup.out文件。若当前目录的nohup.out文件不可写,输出会重定向到$HOME/nohup.out文件中。若没有文件能创建或打开以用于追加,那么该命令不可调用 。2>&1:这是将标准错误输出(stderr)重定向到标准输出(stdout),也就是将程序运行过程中产生的错误信息也一并写入到nohup.log文件中。&:该符号表示将命令放到后台执行,这样在执行该命令后,终端可以继续接受并执行其他命令,不会被当前的 Java 程序阻塞。
操作示例
假设要在后台启动一个名为 myapp.jar 的 Java 应用,并将输出信息保存到 myapp.log 文件中,可以使用以下命令:
bash
nohup java -jar myapp.jar > myapp.log 2>&1 &
执行该命令后,程序将在后台启动运行,输出信息会被记录到 myapp.log 文件中。
注意事项
- 文件路径 :确保
your-app.jar文件的路径正确。如果 JAR 文件不在当前工作目录下,需要使用绝对路径或相对路径来指定其位置。 - 文件权限 :要保证当前用户对指定的输出文件(如
nohup.log)有写入权限,否则会出现输出重定向失败的问题。如果没有权限,可以使用chmod命令修改文件权限。 - 日志查看 :可以使用
tail -f nohup.log命令实时查看程序的输出日志,以便监控程序的运行状态。 - 进程管理 :使用
ps -ef | grep java命令可以查看当前系统中正在运行的 Java 进程,通过kill命令可以终止指定的 Java 进程。
以服务形式管理
另外,还可以将该 Java 程序以服务的形式进行管理,创建一个以 "服务名.service" 格式命名的文件,文件内容参考如下 :
plaintext
[Unit]
Description: 描述服务
After: 描述服务类别
[Service]
Type=forking
ExecStart=/绝对路径/java -jar /绝对路径/your-app.jar > /绝对路径/nohup.log 2>&1
ExecReload=/绝对路径/重启脚本路径
ExecStop=/绝对路径/停止脚本路径
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意启动、重启、停止命令全部要求使用绝对路径,因为需要找到该服务对应的启动、重启、停止脚本。