Envoi d'un message au serveur via la prise lors du démarrage à l'aide de Upstart

Problème

J'ai besoin d'envoyer un message au serveur via une prise TCP tout en exécutant un ordinateur. Nous utilisons Ubuntu 14.04 et donc par défaut doit être utilisé Upstart Comme initialisation du système. (Nous avons aussi d'autres ordinateurs en cours d'exécution Ubuntu 16.04, qui peut utiliser systemd, J'essaie donc de stocker les scripts shell séparément du fichier d'initialisation du système.)

Solution actuelle

Actuellement, j'utilise deux fichiers pour les clients: Popping File .conf et le fichier de script shell.

Fichier rose

Fichier rose (Appelons ça foo.conf) Il a le contenu suivant:


#!upstart
description "Send Message on Startup"

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

exec /opt/foo/foo.sh

Coque de fichier

Coque de fichier (Appelons ça foo.sh) Il a le contenu suivant


#!/bin/bash

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

Symptômes

Lorsque je redémarre l'ordinateur sur lequel ces fichiers ont, je reçois ce qui suit dans le fichier journal:


Sending update message...
Completed sending update message.

Cependant, le serveur ne reçoit jamais un message.

Question

Actuellement, cette solution ne fonctionne pas. Je cherche des suggestions sur la manière de faire de cette solution au travail ou à d'autres suggestions pour effectuer la même tâche.

Fichier de mise à jour systemd

Voici les détails du fichier de l'unité de service systemd, que j'ai allumé Ubuntu 16.04. Cela fonctionne avec chaque redémarrage.


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

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

[Install]
WantedBy=multi-user.target
Invité:

Agathe

Confirmation de:

Essaye ça:

#!upstart
description "Send Message on Startup"

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

Voici une autre option pour résoudre ce problème. Fondamentalement, attendez jusqu'à ce qu'il réponde à 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."

Pour répondre aux questions, connectez-vous ou registre