我正在使用Ubuntu 16.04,我有两个shell脚本:
我需要在系统启动后立即执行这两个脚本。
我使两个脚本都可执行,然后将以下命令添加到cron:
@reboot /path/to/run_roscore.sh; /path/to/run_detection_node.sh
,但它没有运行。
我还尝试使用此命令将两个脚本添加到启动应用程序中,用于roscore:sh /path/to/run_roscore.sh
,并执行以下检测节点命令:sh /path/to/run_detection_node.sh
。它仍然无效。
如何让这些脚本运行?
编辑:我使用以下命令查看CRON进程的系统日志:grep CRON /var/log/syslog
并得到以下输出:
CRON[570]: (CRON) info (No MTA installed, discarding output)
。
所以我安装了MTA然后系统日志显示:
CRON[597]: (nvidia) CMD (/path/to/run_roscore.sh; /path/to/run_detection_node.sh)
我仍然无法看到输出(应该是带有检测的摄像机流,正如我在终端中直接运行脚本时所看到的那样)。我该怎么办?
答案 0 :(得分:1)
自从我最终开始工作以来,我将在这里回答我自己的问题。
我执行了以下步骤来使脚本从启动运行:
.bash
)。#!/bin/bash
。bash path/to/script
以运行脚本。基本上,当我将外壳类型从sh
更改为bash
时,脚本会在系统启动后立即开始运行。
请注意,以防万一:某人将run_roscore.bash
作为单独的脚本的意图是将roscore作为后台进程运行。在rosnode启动之前,可以通过使用roscore&
作为命令,从单个脚本(也正在运行检测节点)直接运行它。该命令将启动主机作为后台进程,并保持同一终端打开以执行以下命令。
答案 1 :(得分:0)
如果您可以安装immortal,则可以使用require
选项按顺序启动您的服务,例如,这可能是/etc/immortal/script1.yml
的{{3}}配置:
cmd: /path/to/script1
log:
file: /var/log/script1.log
wait: 1
require:
- script2
适用于/etc/immortal/script2.yml
cmd: /path/to/script2
log:
file: /var/log/script2.log
这样做会尝试在启动时启动两个脚本,第一个脚本script1
将在启动前等待1秒,并等待script2
启动并运行,详情请参阅这里有wait
和require
选项:run
根据您的操作系统,您需要配置/设置https://immortal.run/post/immortal/,她是如何为Linux执行的:immortaldir
在主管的主题中更深入了解你可以找到更多的替代方案:https://immortal.run/post/how-to-install/
答案 2 :(得分:0)
如果你想确保" Roscore" (无论是什么)在你的Ubuntu启动时启动,然后你应该将它作为服务启动(而不是通过cron)。 请参阅此question/answer。