executa dois processos em andamento na inicialização com um que precisa de tempo de inicialização

0

Eu gostaria de gravar o consumo de utilitários de gravação logo na inicialização, mas não consigo encontrar a combinação certa de operadores, pipes e comandos sleep para entrar no crontab -e. Acho que minha tentativa mais inteligente seria

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

Este não deve começar a iniciar o rtl_tcp, esperar alguns segundos e começar a registrar com o rtlamr?

    
por cylondude 02.05.2016 / 00:15

2 respostas

1

Uma maneira mais fácil seria colocar seus comandos de inicialização em um script e invocar isso:

# 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

e, no seu crontab

@reboot /var/local/foo

Sua expressão com || s exige que rtl_tcp e sleep 4 retornem um status de 0 para que a próxima etapa seja avaliada.

    
por waltinator 02.05.2016 / 00:42
0

Imediatamente, estou percebendo que seu comando

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

usa um operador de lista OR (os símbolos || ). Isso é feito:

% bl0ck_qu0te%

Portanto, o comando sleep 4 só será executado se rtl_tcp falhar , e o último comando (registro) só iniciar se sleep falhar.

Tente usar o operador de lista AND && , ele só executa o próximo comando se o anterior tiver êxito.

E veja man bash para mais informações sobre eles (Shell Grammar - > Lists).

    
por Xen2050 02.05.2016 / 09:18