在 Linux 和 Unix 系统中,可以使用多种方法将脚本或命令在后台执行。后台执行脚本的目的是使脚本或命令在不阻塞终端的情况下运行。这些方法包括使用 &
符号、nohup
命令和 screen
或 tmux
会话等。
1. 使用 &
符号
将命令或脚本放在后台执行的最简单方法是使用 &
符号。这样做可以让命令在后台运行,同时返回终端提示符以便进行其他操作。
示例
创建一个简单的脚本 background_script.sh
,内容如下:
sh
#!/bin/bash
echo "Script is starting"
sleep 10
echo "Script has finished"
在后台执行该脚本:
sh
chmod +x background_script.sh
./background_script.sh &
2. 使用 nohup
命令
nohup
命令用于在不挂起的情况下运行命令,即使用户注销了,命令仍然会继续运行。通常与 &
结合使用。
示例
sh
nohup ./background_script.sh &
输出将被重定向到 nohup.out
文件,您可以使用 tail -f nohup.out
查看输出。
3. 使用 disown
命令
在使用 &
启动进程后,可以使用 disown
命令将其从当前的 Shell 会话中分离,使其在会话结束后继续运行。
示例
sh
./background_script.sh &
disown
4. 使用 screen
或 tmux
screen
和 tmux
是两个流行的终端复用器,可以让您在多个会话中管理多个终端。即使您断开连接,进程也会继续运行。
使用 screen
- 启动一个新的
screen
会话:
sh
screen -S mysession
- 在
screen
会话中运行您的脚本:
sh
./background_script.sh
-
按
Ctrl+A
然后按D
以分离会话。 -
您可以使用以下命令重新连接到会话:
sh
screen -r mysession
使用 tmux
- 启动一个新的
tmux
会话:
sh
tmux new -s mysession
- 在
tmux
会话中运行您的脚本:
sh
./background_script.sh
-
按
Ctrl+B
然后按D
以分离会话。 -
您可以使用以下命令重新连接到会话:
sh
tmux attach -t mysession
5. 使用 &
和输出重定向
在后台运行脚本并将输出重定向到文件,以便在以后查看输出。
示例
sh
./background_script.sh > output.log 2>&1 &
6. 使用 at
命令
at
命令用于在指定时间运行命令或脚本。它也是一种在后台运行脚本的方法。
示例
sh
echo "./background_script.sh" | at now
示例总结
以下是一个综合示例,演示了如何使用上述方法在后台运行脚本:
sh
#!/bin/bash
# 使用 & 符号
./background_script.sh &
# 使用 nohup 命令
nohup ./background_script.sh &
# 使用 disown 命令
./background_script.sh &
disown
# 使用 screen
screen -S mysession -dm ./background_script.sh
# 使用 tmux
tmux new -d -s mysession ./background_script.sh
# 使用 & 符号和输出重定向
./background_script.sh > output.log 2>&1 &