nohup
(no hang-up)命令在 Linux 中用于在用户退出登录后继续运行指定的命令或程序。以下是 nohup
命令的一些常见用法:
基本用法
-
运行单个命令
nohup command &
例如:
nohup sleep 3600 &
这将使
sleep 3600
命令在后台运行,并且即使你退出登录,它也会继续运行。 -
运行脚本
nohup ./script.sh &
这将使
script.sh
脚本在后台运行,并且即使你退出登录,它也会继续运行。 -
指定输出文件 默认情况下,
nohup
会将输出重定向到nohup.out
文件。你可以显式指定输出文件:nohup command > output.log 2>&1 &
这将把标准输出和标准错误都重定向到
output.log
文件。
高级用法
-
使用
&
后台运行 在命令末尾加上&
可以使命令在后台运行,这样你就可以立即返回到命令行提示符。nohup command &
-
使用
disown
命令 如果你已经启动了一个命令,但后来想要将其从当前 shell 的作业表中移除,可以使用disown
命令:nohup command & disown
-
使用
screen
或tmux
对于需要更复杂会话管理的任务,可以使用screen
或tmux
工具。这些工具允许你在多个会话之间切换,并且即使终端关闭,会话也会继续运行。screen -S mysession command # 按 Ctrl+A 然后按 D 退出会话
-
使用
systemd
服务 对于需要在系统启动时自动运行的任务,可以创建一个systemd
服务单元文件。[Unit] Description=My Service [Service] ExecStart=/path/to/command Restart=always [Install] WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable myservice.service sudo systemctl start myservice.service
注意事项
nohup
命令会忽略挂起信号(SIGHUP),因此即使你退出登录,命令也会继续运行。- 使用
nohup
时,建议将输出重定向到文件,以避免输出到终端导致混乱。 - 对于长时间运行的任务,考虑使用更高级的工具如
screen
、tmux
或systemd
服务来管理。
通过这些用法,你可以有效地在 Linux 中使用 nohup
命令来确保命令在用户退出登录后继续运行。