在连续输入nohup 命令1 和 nohup 命令2 两条命令之后,关闭终端,命令1和命令2都会在后台继续运行吗
时间: 2024-05-22 21:10:00 浏览: 105
如果您在终端中连续输入nohup命令1和nohup命令2,并在两个命令都启动后关闭终端,则这两个命令将继续在后台运行。因为nohup命令会将进程与当前终端分离,即使关闭终端,进程也会继续运行。但是,您应该注意,如果您在命令1或命令2中使用了任何与终端相关的操作,例如输入或输出,则这些操作可能会受到影响,并且可能会在关闭终端后停止工作。因此,在使用nohup命令时,最好将命令的输入和输出重定向到文件中,以确保不会受到终端关闭的影响。
相关问题
linux后台运行jar包命令
在Linux系统中后台运行JAR文件是一个常见的需求,尤其是在部署Java应用程序的时候。下面是几种让JAR包在后台持续运行的方式:
### 使用 nohup 命令
`nohup`(No Hang up)可以忽略挂起信号(SIGHUP),即当用户退出终端之后程序仍然能够继续运行下去。
- 执行命令:
```bash
$ nohup java -jar your-application.jar &
```
这条命令会启动应用并将它放到后台运行;所有的输出将会被记录到当前目录下的 `nohup.out` 文件中除非另有指定输出位置。
如果你不想生成nohup.out日志文件,则可以在命令结尾添加 > /dev/null 2>&1 来将标准输出和错误重定向至空设备。
```bash
$ nohup java -jar your-application.jar >/dev/null 2>&1 &
```
### 使用 screen 工具
Screen工具允许创建一个持久性的虚拟控制台,在其中你可以安全地关闭物理连接而不会影响正在运行的任务。
首先安装screen(如果尚未安装的话)
对于Debian/Ubuntu发行版来说可以用下面的指令来进行安装:
```bash
sudo apt-get install screen
```
然后按照以下步骤操作即可:
1. 创建一个新的会话并命名:`screen -S myappsession`
2. 启动你的Java服务:`java -jar your-application.jar`
3. 按下 Ctrl+A 然后再按 D 键就可以从这个screen session脱离出来了。此时回到shell界面,并且那个screen窗口还在后台保持活动状态。
想要查看所有已开启sessions列表以及重新连入刚才断开的那个screen,您可以分别用这两个命令:`screen -ls`,`screen -r myappsession`.
### 使用 Systemd (适用于现代 Linux 发行版本)
通过编写systemctl service单元配置文件使得服务开机自启并且稳定可靠。
创建名为your-app.service的服务定义文件放在/etc/systemd/system路径下:
内容示例如下:
```ini
[Unit]
Description=My Java Application Service
[Service]
ExecStart=/usr/bin/java -jar /path/to/your-application.jar
SuccessExitStatus=143
Restart=on-failure
User=nobody # 运行此service的账户名可根据需要更改
WorkingDirectory=/opt/my-java-app/
[Install]
WantedBy=multi-user.target
```
保存修改后的配置文后执行如下命令加载新设置并启用该服务随机器一起启动.
```bash
$ sudo systemctl daemon-reload
$ sudo systemctl enable your-app.service
$ sudo systemctl start your-app.service
```
以上就是三种常用的方法让你的应用能够在Linux环境下作为守护进程长期稳定工作了!
nohup bash run > train.log 2>&1 &
### 使用 `nohup` 命令在后台执行 Bash 脚本并重定向输出
为了确保命令能在关闭终端之后继续运行,并将所有的输出信息保存到指定的日志文件中,可以采用如下方式来构建命令:
当希望使用 `nohup` 来启动一个脚本并在后台持续运行的同时,将标准输出和标准错误都导向同一个日志文件时,应当按照以下模式书写命令[^1]:
```bash
nohup ./script.sh > train.log 2>&1 &
```
这里解释各个部分的作用:
- `./script.sh`: 表示要执行的脚本名称。
- `>`: 输出重定向操作符,用于改变默认的标准输出目标。
- `train.log`: 自定义的日志文件名,在此例子中为 `train.log`。
- `2>&1`: 将标准错误(file descriptor 2)重定向至当前标准输出的位置;因为前面已经设置了标准输出指向 `train.log`,因此这也会使得标准错误被写入同一文件内。
- `&`: 让整个命令作为子进程异步执行,即放到后台去跑。
对于多条需要同时保持独立日志记录的任务,则需要注意避免不同任务之间的输出相互覆盖或混淆。如果遇到类似情况——比如两个不同的程序通过 `nohup` 启动后只有一个能正常更新其对应的日志文件——可能是因为某些特定环境配置或是资源竞争所引起的特殊状况[^3]。此时建议检查各任务间是否存在依赖关系或其他潜在冲突因素,并考虑增加唯一标识以便区分各自的日志流。
此外值得注意的是,虽然 `nohup` 可以使进程脱离控制终端的影响而持久化工作,但这并不意味着任何情况下都能完美实现预期效果。例如网络服务端口占用、权限不足等问题仍可能导致实际行为偏离期望值[^4]。
阅读全文
相关推荐














