
Ubuntu日本語フォーラム

ログインしていません。
恐れ入ります。systemd を使って、起動時に自分のIPアドレスを外部に連絡するスクリプトがあります。
これを、systemd を使って起動時に実行し、モニタ・キーボードのない状態での作業に使いたいのですが、
/etc/systemd/system 内に、sendip.service として
[Unit]
Description = e_ipsend
After=network.target
[Service]
# Restart=no
Type=simple
# RemainAfterExit=yes
User=pi
ExecStart=実行シェル
[Install]
WantedBy=multi-user.target
と中身を記述しました。
sudo systemctl daemon-reload
sudo systemctl enable sendip.service
sudo systemctl stop sendip.service
sudo systemctl start sendip.service
sudo systemctl status sendip.service
を実行、これに対しても
sendip.service: Succeeded.と帰ってきて
スクリプトも動き、結果も良好なのですが・・
実際に再起動するとシェルが実行されません。
再度sudo systemctl start sendip.service
とすると実行されます。
このようなケースでは、あと何が考えられますでしょうか。
どこを確認したら良いでしょうか。
恐れ入りますが、どなたかアドバイスをお願いいたします。
オフライン
実行シェルで、何かログを出力させていますか?
実行シェルで何をさせているか分からないのですが、依存サービスが起動しきる前に実行シェルが動作してしまい、正常な動作ができていないとかはありませんか。
オフライン
早急なレスポンスありがとうございます。
残念ながらログは無いかと思います。
syslog などは覗いて見たのですが、
繋がりそうな情報を見つけられませんでした。
頂いたお返事をヒントに、afterに何か入れたら、起動時間を遅らせられないかと思いますので、試してみます
オフライン
実行シェルは自作ではないのでしょうか。
実行シェル中のポイント毎に logger コマンドを挿入してその瞬間の動作状況をログに出力するようにしてはどうでしょう。
オフライン
途中経過を流すのが不適切でしたら教えてください。
頂いたアドバイスを参考に、
シェルに
logger "start sendip"
IPW=`ip a | grep "inet 192"`
logger "in line_sendip $IPW"
と実行させてログを見てみました。
すると何故か、一行目のstart sendip はログに無く、
logger "in line_sendip とだけがログに乗っています。
$IPW は表示されす・・
起動のタイミングを遅らせてみようかと
[Install]
WantedBy=graphical.target
としてみましたが変化はありませんでした。
sudo systemctl start で実行した場合には、実行結果も問題なく、
ログにも
start line_sendip
in line_sendip inet 192.168.**.***/24 brd 192.168.**.255 scope global dynamic noprefixroute wlan0
と表示されるのですが・・・
なぜ一行目のlogger が実行されていないのか、二行目のIPWになぜ環境変数が入っていないのか不明です。
タイミングの問題なのでしょうか。
オフライン
ネットワークへの IP アドレス確立が動作の前提なら、service ファイルに以下を追加してはどうでしょうか。
[Unit] Wants=network-online.target After=network-online.target
なお、WantedBy は、このユニットに依存するユニットを指定するものなので、このユニット自体の起動タイミングは基本的に変わりません。
オフライン
ry さん、アドバイスありがとうございます。
Wants=network-online.target
After=network-online.target
を入れてみましたが、はやりだめなようです。
logger "start sendip"
IPW=`ip a | grep "inet 192"`
の二行が実行されず・・
何度もアドバイスを頂いたのにすみません。
オフライン
自作シェルの先頭に以下の一行を追加してみてはどうでしょうか。
単なる対処療法ですが、自作シェルの実行を 1秒遅らせるだけのものです。
sleep 1
オフライン