nohup命令是一个在Linux环境中非常有用的命令,其全称为 'no hang up'。它的主要作用是让你提交的命令或者程序在你退出(断开SSH连接)后继续运行。这对于运行长时间操作的脚本或者程序时尤其有用,比如数据备份、网络服务等。使用nohup,即使用户注销或终端关闭,程序还会在后台运行。
Linux nohup命令适用的Linux版本
nohup是大多数Linux发行版的标准工具,包括Fedora, Ubuntu, CentOS, Debian等。在CentOS 7上你可以使用yum安装它,而在CentOS 8上你需要使用dnf。
- CentOS 7 安装命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils
- CentOS 8 安装命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install coreutils
如果在某些发行版中没有预装nohup,可以通过上述命令进行安装。
Linux nohup命令的基本语法
nohup命令的基本语法结构如下:
nohup COMMAND [ARG]...
其中COMMAND
是你希望在后台持续运行的命令,ARG
...代表传递给命令的任意参数。
Linux nohup命令的常用选项或参数说明
由于nohup命令相对简单,没有许多选项,以下是一个简化的表格:
选项 | 描述 |
---|---|
-- | 表示后面的内容都将被当作参数或命令来处理 |
Linux nohup命令实例详解
实例1:在后台运行 Python 脚本
如果你有一个长时间运行的Python脚本 long_script.py
,使用nohup可以在后台运行:
[linux@bashcommandnotfound.cn ~]$ nohup python long_script.py &
实例2:输出重定向并运行 Node.js 应用
运行Node.js应用并将标准输出和错误输出分别重定向到不同的文件:
[linux@bashcommandnotfound.cn ~]$ nohup node app.js > app.log 2> app.err &
实例3:在特定时间运行命令
使用nohup与at
命令结合,可以在特定时间运行脚本或命令:
[linux@bashcommandnotfound.cn ~]$ echo "nohup ./backup.sh &" | at 01:00
这条命令会设定在凌晨1点运行backup.sh
脚本。
实例4:使用nohup运行复合命令
如果需要运行由多个部分组成的复杂命令,可以将它们组合在一起:
[linux@bashcommandnotfound.cn ~]$ nohup sh -c 'cd /path/to/directory && ./run_this_then_that.sh' &
实例5:在循环中使用nohup运行命令
在脚本中,你可能需要对多个文件使用相同的处理。可以将nohup放在循环中:
[linux@bashcommandnotfound.cn ~]$ for file in /path/to/data/files/*; do nohup ./process "$file" > "${file}.log" 2>&1 & done
实例6:使用nohup保持SSH隧道开启
如果需要保持一个SSH隧道开启,即使SSH会话关闭:
[linux@bashcommandnotfound.cn ~]$ nohup ssh -L local_port:remote_address:remote_port user@ssh_server -N &
实例7:结合find命令使用nohup
你可以结合使用find
和nohup
来对找到的每个文件执行长时间运行的操作:
[linux@bashcommandnotfound.cn ~]$ nohup find /path/to/data -type f -name "*.data" -exec ./long_script '{}' \; &
这些例子展示了nohup命令的灵活性和多样性。根据需要,可以通过组合不同的命令和选项,让nohup适应各种后台运行任务的场景。记得在命令的末尾加上&
字符,这样命令才会在后台运行。
Linux nohup命令的注意事项
- 使用nohup运行的命令会忽略HUP(挂断)信号。
- nohup默认会将命令的输出重定向到
nohup.out
文件中,除非你通过重定向操作指定了输出文件。 - 如果你在一个没有写权限的目录中使用nohup,并且没有指定输出文件,命令会因无法创建
nohup.out
而失败。 - 使用nohup运行的命令不会自动放到后台运行,需要在命令末尾添加
&
符号。 - `bashbash: nohup: command not found - 如果你遇到这个错误,请按照上面的安装指南安装nohup。
评论区