【linux】shell(34)-后台执行脚本

在 Linux 和 Unix 系统中,可以使用多种方法将脚本或命令在后台执行。后台执行脚本的目的是使脚本或命令在不阻塞终端的情况下运行。这些方法包括使用 & 符号、nohup 命令和 screentmux 会话等。

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. 使用 screentmux

screentmux 是两个流行的终端复用器,可以让您在多个会话中管理多个终端。即使您断开连接,进程也会继续运行。

使用 screen

  1. 启动一个新的 screen 会话:
sh 复制代码
screen -S mysession
  1. screen 会话中运行您的脚本:
sh 复制代码
./background_script.sh
  1. Ctrl+A 然后按 D 以分离会话。

  2. 您可以使用以下命令重新连接到会话:

sh 复制代码
screen -r mysession

使用 tmux

  1. 启动一个新的 tmux 会话:
sh 复制代码
tmux new -s mysession
  1. tmux 会话中运行您的脚本:
sh 复制代码
./background_script.sh
  1. Ctrl+B 然后按 D 以分离会话。

  2. 您可以使用以下命令重新连接到会话:

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 &
相关推荐
黄筱筱筱筱筱筱筱18 分钟前
LINUX-防火墙
linux·服务器·网络
сокол1 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神1 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
凯丨2 小时前
Claude Code 自动化开发的完整体系
运维·自动化
L、2184 小时前
昇腾NPU性能调优Checklist——从“能跑“到“跑得快“的20步
服务器·人工智能·深度学习
SilentSamsara5 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程
不吃土豆的马铃薯5 小时前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
疯狂成瘾者5 小时前
常见的 Linux 版本
linux·运维·服务器
szxinmai主板定制专家5 小时前
基于ZYNQ MPSOC图像采集与压缩系统总体设计方案
linux·arm开发·人工智能·嵌入式硬件·fpga开发
GOTXX5 小时前
SenseNova U1 实战体验:API 调用 + OpenClaw 接入全流程
服务器·网络·人工智能·语言模型