在启动时运行两个正在进行的进程,其中一个需要初始化时间

在启动时运行两个正在进行的进程,其中一个需要初始化时间

我想在启动时开始记录实用程序消耗,但我找不到正确的运算符、管道和睡眠命令组合来输入 crontab -e 。我想我最聪明的尝试是

@reboot rtl_tcp || sleep 4 || ./go/bin/rtlamr -logfile=/home/ubuntu/log.json

这难道不应该启动 rtl_tcp,等待几秒钟,然后开始使用 rtlamr 记录吗?

答案1

一种更简单的方法是将启动命令放在脚本中,然后调用该脚本:

# You could put the file in any other directory that is mounted
# early in boot time (not your HOME directory)
cat >>/var/local/foo <<EOF
#!/bin/bash
# Suggestion: use absolute path: /usr/local/bin/rtl_tcp
rtl_tcp
sleep 4
# Warning - MUST specify absolute path! "." is probably "/" here.
./go/bin/rtlamr -logfile=/home/ubuntu/log.json
EOF
chmod +x /var/local/foo

并且,在你的crontab

@reboot /var/local/foo

带有 s 的表达式||要求rtl_tcp并且sleep 4每个都返回一个状态,0以便评估下一步。

答案2

我立即注意到你的命令

@reboot rtl_tcp || sleep 4 || ./go/bin/rtlamr -logfile=/home/ubuntu/log.json

使用 OR 列表运算符(||符号)。它执行以下操作:

OR 列表的形式为

command1 || command2

当且仅当 command1 返回非零退出状态时,才会执行 command2。

因此,sleep 4仅当满足以下条件时,命令才会运行:rtl_tcp 失败,并且只有sleep失败时才会启动最后一个(日志记录)命令。

尝试使用 AND 列表运算符&&,只有前一个命令成功时才运行下一个命令。

并查看man bash有关它们的更多信息(Shell 语法 -> 列表)。

相关内容