我需要在计算机启动过程中通过TCP套接字发送消息到服务器。 我们使用的是Ubuntu 14.04,因此,默认情况下,必须使用Upstart作为系统初始化。 (我们也有运行Ubuntu 16.04的其他计算机可以使用systemd,所以我试图保持shell脚本与系统初始化文件分开)
目前我为客户端使用两个文件:一个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文件(我们将其称为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议。
以下是我在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."