
Me deparei com o seguinte cenário em um dos servidores que precisei gerenciar recentemente. É um Ubuntu usado como servidor de streaming de música, a música deve ser alterada de acordo com um cronograma, mas o último administrador de sistema fez isso manualmente com 3 scripts (00-stop.sh, 10-server.sh e 20-client.sh) Aqui estão os passos que ele usou/explicou para mim:
- Execute o script 00-stop.sh para parar o servidor de streaming.
- Altere a lista no script 20-client.sh.
- Execute 10-server.sh usando "&" para mantê-lo funcionando em segundo plano.
- Execute 20-client.sh com a lista atualizada, a música começará a ser transmitida.
Acho que poderia usar a automação do Cron para alterar a música automaticamente, mas não sei como fazer isso. Minha ideia é ter quatro scripts: 00-stop.sh 10-server.sh 20-client.sh (com lista de músicas 1) 30-client.sh (com lista de músicas 2)
E execute 20 ou 30 clientes de acordo com o agendamento. Cada tarefa cron deve chamar 00-stop.sh primeiro, depois 10-server.sh (e mantê-lo em segundo plano) e depois 20-client.sh ou 30-client.sh.
Imagino algo como:
0 10 * * 1 /path/00-stop.sh && /path/10-server.sh && /path/20-client.sh
O problema é que preciso que o segundo script (10-server.sh) continue rodando em segundo plano, como poderia fazer isso?
Responder1
Eu montaria um único script:
#!/usr/bin/env bash
set -e # abort for any non-zero exit statuses
/path/00-stop.sh
/path/10-server.sh </dev/null >/dev/null 2>&1 &
disown
/path/20-client.sh
Então o cron job seria
0 10 * * 1 bash /path/refresh_music_server.sh