使用Upstart在启动时通过套接字发送消息到服务器

问题

我需要在计算机启动过程中通过TCP套接字发送消息到服务器。 我们使用的是Ubuntu 14.04,因此,默认情况下,必须使用Upstart作为系统初始化。 (我们也有运行Ubuntu 16.04的其他计算机可以使用systemd,所以我试图保持shell脚本与系统初始化文件分开)

当前解决scheme

目前我为客户端使用两个文件:一个upstart .conf文件和一个shell脚本文件。

新贵档案

新贵档案(我们称之为foo.conf)有以下内容:

#!upstart description "Send Message on Startup" start on (local-filesystems and net-device-up and runlevel [2345]) exec /opt/foo/foo.sh 

shell文件

shell文件(我们将其称为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. 

但是,服务器永远不会收到消息。

问题

目前,这个解决scheme不起作用。 我正在寻找如何使这个解决scheme工作或其他build议来完成相同的任务的build议。

更新:systemd文件

以下是我在Ubuntu 16.04框中部署的systemd服务单元文件的详细信息。 这个在每次重启时都能正常工作

 [Unit] Description=Send Message on Startup After=network-online.target [Service] Type=oneshot ExecStart=/opt/foo/foo.sh [Install] WantedBy=multi-user.target 

尝试这个:

 #!upstart description "Send Message on Startup" start on (local-filesystems and net-device-up IFACE!=lo and runlevel [2345]) 

这是应该解决的另一个select。 基本上等到它响应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."