我想在启动时开始记录实用程序消耗,但我找不到正确的运算符、管道和睡眠命令组合来输入 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 语法 -> 列表)。