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