当前位置: 首页 > article >正文

Ubuntu通过脚本启动多个可执行文件

Ubuntu通过脚本启动多个可执行文件

在 Ubuntu 中,可以通过一个脚本启动多个可执行文件,同时支持顺序执行、并行执行或特定条件下的执行。以下是实现的详细方法:


1. 创建脚本文件

首先,创建一个脚本文件,例如 start_programs.sh

touch start_programs.sh
chmod +x start_programs.sh
  • touch 创建脚本文件。
  • chmod +x 为脚本添加执行权限。

2. 编写脚本内容

顺序启动(一个完成后启动下一个)

在脚本中逐行启动程序:

#!/bin/bash

# 启动第一个程序
/path/to/program1

# 启动第二个程序
/path/to/program2

# 启动第三个程序
/path/to/program3

这种方式确保前一个程序运行结束后才会启动下一个。


并行启动(同时运行多个程序)

使用 & 将程序放入后台运行:

#!/bin/bash

# 启动多个程序并行运行
/path/to/program1 &
/path/to/program2 &
/path/to/program3 &

# 等待所有后台任务完成
wait

wait 命令确保脚本会等待所有程序运行完成后退出。


按条件启动

使用 ifcase 实现条件控制:

#!/bin/bash

if [ condition ]; then
    /path/to/program1
else
    /path/to/program2
fi

或者使用 case

#!/bin/bash

case $1 in
    program1)
        /path/to/program1
        ;;
    program2)
        /path/to/program2
        ;;
    *)
        echo "Usage: $0 {program1|program2}"
        ;;
esac

运行时可以通过参数控制启动的程序:

./start_programs.sh program1

带日志记录

记录输出和错误日志:

#!/bin/bash

/path/to/program1 > program1.log 2>&1 &
/path/to/program2 > program2.log 2>&1 &
wait
  • > program1.log 将标准输出重定向到日志文件。
  • 2>&1 将标准错误也重定向到同一文件。

3. 运行脚本

保存并运行脚本:

./start_programs.sh

如果需要调试或测试,可以使用 bash 明确调用:

bash start_programs.sh

高级选项

指定运行顺序并控制依赖

使用 && 来确保前一个命令成功后才运行下一个:

/path/to/program1 && /path/to/program2

通过 tmuxscreen 管理会话

如果需要启动程序后关闭终端,可以使用 tmuxscreen 管理。

示例使用 tmux

#!/bin/bash

tmux new-session -d -s mysession "/path/to/program1"
tmux new-window -t mysession "/path/to/program2"
tmux attach -t mysession

4. 常见问题

  1. 程序找不到:
    确保程序路径正确或使用相对路径运行。

  2. 权限问题:
    确保脚本和可执行文件有执行权限。

  3. 环境变量问题:
    如果程序依赖特定环境变量(如 LD_LIBRARY_PATH),可在脚本开头设置:

    export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
    

按照以上步骤,您可以灵活控制多个程序的启动方式和执行逻辑。


http://www.kler.cn/a/419187.html

相关文章:

  • Hive 安装与架构详解
  • 机器学习之RLHF(人类反馈强化学习)
  • vue3中 axios 发送请求 刷新token 封装axios
  • 【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
  • Qt如何改变串口读取数据的频率
  • JavaEE-经典多线程样例
  • 缓存之Redis介绍
  • 小程序-基于java+SpringBoot+Vue的校园二手交易小程序设计与实现
  • 安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本
  • Java Web环境下处理MySQL多线程高并发
  • 【论文笔记】Leveraging the Power of MLLMs for Gloss-Free Sign Language Translation
  • 网络设备配置指南:交换机、路由器与防火墙的基础配置与管理
  • Scala的练习题
  • C++初阶(十七)--STL--stack和queue详解及使用
  • IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“
  • 如何用Excel做数据可视化自动化报表?
  • 泷羽sec-shell(7)for循环与while循环 学习笔记
  • Linux下的三种 IO 复用
  • 文件比较和文件流
  • 大数据治理的介绍与认识
  • LeetCode题解:30.串联所有单词的子串【Python题解超详细,KMP搜索、滑动窗口法】,知识拓展:Python中的排列组合
  • 贝叶斯统计:高斯分布均值μ的后验分布推导
  • 详解QtPDF之 QPdfLink
  • 基于PHP的物流配送管理信息系统的设计与实现
  • 【redis】如何跑
  • flink学习(12)——checkPoint