我正在使用 Ubuntu 16.04,我有两个 shell 脚本:
- run_roscore.sh:这个在一个终端中启动 roscore。
- run_detection_node.sh:这个在另一个终端中启动一个对象检测节点,并且应该在 run_roscore.sh 初始化 roscore 后启动。
我需要这两个脚本在系统启动时立即执行。
我使这两个脚本都可执行,然后将以下命令添加到 cron:
@reboot/path/to/run_roscore.sh;/path/to/run_detection_node.sh
,但它没有运行。
我还尝试将这两个脚本添加到 Startup Applications 中,对 roscore 使用此命令:sh/path/to/run_roscore.sh
并使用以下命令检测节点: sh/path/to/run_detection_node.sh
。它仍然不起作用。
如何运行这些脚本?
编辑:我使用以下命令查看 CRON 进程的系统日志:grep CRON/var/log/syslog
并获得以下输出:
CRON[570]:(CRON) 信息(未安装 MTA,丢弃输出)
。
所以我安装了 MTA,然后系统日志显示:
CRON[597]:(nvidia)CMD(/path/to/run_roscore.sh;/path/to/run_detection_node.sh)
我仍然看不到输出(应该是带有检测的摄像头流,正如我直接在终端中运行脚本时看到的那样)。我应该如何进行?
最佳答案
由于我最终完成了这项工作,我将在这里回答我自己的问题。
我执行了以下步骤以使脚本从启动开始运行:
- 将脚本的类型从 shell 更改为 bash(扩展名
.bash
)。 - 将 shebang 语句更改为
#!/bin/bash
。 - 在启动应用程序中,输入命令
bash path/to/script
以运行脚本。
基本上,当我将 shell 类型从 sh
更改为 bash
时,脚本会在系统启动后立即开始运行。
请注意,如果这对某人有帮助:我打算将 run_roscore.bash
作为一个单独的脚本来运行 roscore 作为后台进程。通过在 rosnode 启动之前将 roscore&
作为命令,可以直接从单个脚本(它也运行检测节点)运行它。此命令将作为后台进程启动 master 并使同一终端保持打开状态以执行以下命令。
关于linux - 如何在启动时运行两个shell脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438421/