Отправка сообщения на сервер через сокет при запуске с использованием Upstart

Проблема

Мне нужно отправить сообщение на сервер через сокет TCP во время запуска компьютера. Мы используем Ubuntu 14.04 и поэтому по умолчанию должны использовать Upstart в качестве инициализации системы. (У нас также есть другие компьютеры под управлением Ubuntu 16.04, которые могут использовать systemd, поэтому я пытаюсь хранить сценарии оболочки отдельно от файла инициализации системы)

Текущее решение

В настоящее время я использую два файла для клиентов: файл выскочки .conf и файл сценария оболочки.

Файл выскочки

Файл выскочки (назовем его foo.conf) имеет следующее содержимое:


#!upstart
description "Send Message on Startup"

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

exec /opt/foo/foo.sh

Файл оболочки

Файл оболочки (назовем его foo.sh) имеет следующее содержимое


#!/bin/bash

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

Симптомы

Когда я перезагружаю компьютер, на котором есть эти файлы, я получаю следующее в файле журнала:


Sending update message...
Completed sending update message.

Однако сервер никогда не получает сообщение.

Вопрос

В настоящее время это решение не работает. Я ищу предложения о том, как заставить это решение работать, или другие предложения для выполнения той же задачи.

ОБНОВЛЕНИЕ: файл systemd

Вот подробности файла служебного модуля systemd, который я развернул в Ubuntu 16.04 коробка. Этот работает при каждой перезагрузке.


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

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

[Install]
WantedBy=multi-user.target
1
задан 3 May 2017 в 00:03
1 ответ

Išbandykite:

#!upstart
description "Send Message on Startup"

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

Štai dar viena galimybė, kuri turėtų ją išspręsti. Iš esmės palaukite, kol jis reaguos į 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."
2
ответ дан 3 December 2019 в 20:24

Теги

Похожие вопросы