Enviando mensagem para o servidor sobre o soquete na inicialização usando Upstart

1

Problema

Eu preciso enviar uma mensagem para um servidor através de um soquete TCP durante a inicialização do computador. Estamos usando o Ubuntu 14.04 e, portanto, por padrão, devemos usar o Upstart como inicialização do sistema. (Nós também temos outros computadores rodando o Ubuntu 16.04 que podem usar o systemd, então estou tentando manter os scripts de shell separados do arquivo de inicialização do sistema)

Solução Atual

Atualmente estou usando dois arquivos para os clientes: um arquivo .conf upstart e um arquivo de script shell.

Arquivo Upstart

O arquivo upstart (nós o chamaremos foo.conf) tem o seguinte conteúdo:


#!upstart
description "Send Message on Startup"

start on (local-filesystems
        and net-device-up
        and runlevel [2345])

exec /opt/foo/foo.sh

Arquivo Shell

O arquivo shell (chamamos de foo.sh) tem o seguinte conteúdo


#!/bin/bash

echo "Sending update message..."
echo "Message" | nc server-hostname 9999
echo "Completed sending update message."

Sintomas

Quando eu reinicio o computador que possui esses arquivos, obtenho o seguinte no arquivo de log:


Sending update message...
Completed sending update message.

No entanto, o servidor nunca recebe a mensagem.

A questão

Atualmente, esta solução não está funcionando. Estou procurando sugestões sobre como fazer com que essa solução funcione ou outras sugestões para realizar a mesma tarefa.

UPDATE: arquivo systemd

Aqui estão os detalhes do arquivo da unidade de serviço do systemd que eu implantei na caixa do Ubuntu 16.04. Este funciona em todos os reinícios.


[Unit]
Description=Send Message on Startup
After=network-online.target

[Service]
Type=oneshot
ExecStart=/opt/foo/foo.sh

[Install]
WantedBy=multi-user.target
    
por rabidhamper7 02.05.2017 / 22:49

1 resposta

3

Tente isto:

#!upstart
description "Send Message on Startup"

start on (local-filesystems
        and net-device-up IFACE!=lo
        and runlevel [2345])

Aqui está outra opção que deve resolvê-lo. Basicamente espere até responder ao ping.

#!/bin/bash

server_hostname='server_hostname'
ping -c 2 $server_hostname
while [ $? -ne 0 ]
do
  echo 'Waiting for server...'
  sleep 2
  ping -c 2 $server_hostname
done

echo "Sending update message..."
echo "Message" | nc server-hostname 9999
echo "Completed sending update message."
    
por 02.05.2017 / 22:52