Я бы хотел записать использование утилиты начала записи прямо при запуске, но я не могу найти правильную комбинацию операторов, каналов и спящих команд для входа в crontab -e. Я думаю, что моя самая умная попытка была бы
@reboot rtl_tcp || sleep 4 || ./go/bin/rtlamr -logfile=/home/ubuntu/log.json
Разве этот запуск не должен начать rtl_tcp, подождать несколько секунд, а затем начать запись с rtlamr?
Более легкий путь состоял бы в том, чтобы поместить Ваши команды запуска в сценарий и вызвать это:
# 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
Ваше выражение с ||
с требует, чтобы rtl_tcp
и sleep 4
каждый возврат состояние 0
так следующий шаг было оценено.
Сразу я замечаю, что Ваша команда
@reboot rtl_tcp || sleep 4 || ./go/bin/rtlamr -logfile=/home/ubuntu/log.json
использует ИЛИ оператор списка (эти ||
символы). Это делает это:
ИЛИ список имеет форму
command1 || command2
, command2 выполняется, если и только если command1 возвращает ненулевой статус выхода.
Так эти sleep 4
команда будет только выполнена, если rtl_tcp
сбои , и последнее (вход) команда только запустится если sleep
сбои.
Попытка с помощью И оператор &&
списка, это только выполняет следующую команду, если предыдущий успешно выполняется.
И см. man bash
для большего количества информации о них (Грамматика Shell-> Списки).