Linux

使用 Upstart 在啟動時通過套接字向伺服器發送消息

  • February 19, 2020

問題

我需要在電腦啟動期間通過 TCP 套接字向伺服器發送消息。我們使用的是 Ubuntu 14.04,因此預設情況下,必須使用 Upstart 作為系統初始化。(我們還有其他執行 Ubuntu 16.04 的電腦可以使用 systemd,所以我試圖將 shell 腳本與系統初始化文件分開)

目前解決方案

目前我正在為客戶端使用兩個文件:一個 upstart .conf 文件和一個 shell 腳本文件。

新貴檔案

upstart 文件(我們將其稱為 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.

但是,伺服器永遠不會收到消息。

問題

目前,此解決方案不起作用。我正在尋找有關如何使此解決方案發揮作用的建議或完成相同任務的其他建議。

更新:系統文件

以下是我在 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])

這是另一個應該解決它的選項。基本上等到它響應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."

引用自:https://serverfault.com/questions/847874