ネットワーク接続後にsystemdサービスを開始する

ネットワーク接続後にsystemdサービスを開始する

私がsystemdに触れたのは今回が初めてです。ネットワークの起動後にサービスを開始するように管理する方法の解決策が見つかりません。knockd.serviceRaspbianシステムから起動しようとしています。

起動後、サービスが実行されていることを確認してください。

systemctl status knockd
   Loaded: loaded (/lib/systemd/system/knockd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2019-06-27 14:36:26 CEST; 7min ago
     Docs: man:knockd(1)
  Process: 516 ExecStart=/usr/sbin/knockd $KNOCKD_OPTS (code=exited, status=1/FAILURE)
 Main PID: 516 (code=exited, status=1/FAILURE)

Jun 27 14:36:26 pins2 systemd[1]: Started Port-Knock Daemon.
Jun 27 14:36:26 pins2 knockd[516]: could not get IP address for eth0
Jun 27 14:36:26 pins2 systemd[1]: knockd.service: Main process exited, code=exited, status=1/FAILURE
Jun 27 14:36:26 pins2 systemd[1]: knockd.service: Unit entered failed state.
Jun 27 14:36:26 pins2 systemd[1]: knockd.service: Failed with result 'exit-code'.

私の考えの問題はこんな感じです。

could not get IP address for eth0

私がたくさん調べた結果(例えばここそしてそこ)良いヒントが見つかりましたが、残念ながらまだ動作しません。私の.serviceファイルは次のとおりです。

systemctl cat knockd
# /lib/systemd/system/knockd.service
[Unit]
Description=Port-Knock Daemon
Documentation=man:knockd(1)                                                                         
#Requires=network-online.target                                                                     
#Wants=network-online.target                                                                     
After=network-online.target                                                                    

[Service]                                                                                           
EnvironmentFile=-/etc/default/knockd                                                                
ExecStart=/usr/sbin/knockd $KNOCKD_OPTS                                                             
ExecReload=/bin/kill -HUP $MAINPID                                                                  
KillMode=mixed                                                                                      
SuccessExitStatus=0 2 15                                                                            
ProtectSystem=full                                                                                  
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN                                                     

[Install]                                                                                           
WantedBy=multi-user.target                                                                          
Alias=knockd.service                

使ったAfter=network-online.target私の単位部分。それをやってみましたが、Requires=どうすればいいですかWants=

起動後にシステムにIPアドレスがあり、手動でサービスを開始すると正常に動作します。より高速なネットワークを持つ他のネットワークでは、ターゲットがなくても問題はありませんでしたnetwork-online

想像できるように、ノックが安定して起動することが非常に重要です。そうでなければロックできるからです。

これが安定して動作する場合、起動後しばらくしてネットワークケーブルが接続されていても機能しますか?

ところで、ファイルを編集してはいけないことを知っています.service/lib/systemd/...可能な限り上書きの問題を解決するために編集するだけです。すべてがうまくいったら、この問題を解決します。ご協力ありがとうございます。

ベストアンサー1

Wants=このディレクティブはデフォルトでは依存関係チェーンには含まれていないため、必要ですnetwork-online.target(systemd.special(7)マンページを参照)。

ifupdown-wait-online.serviceNetworkManagerを使用していない場合は、有効にする必要があります(systemctlを有効にするifupdown-wait-online.service)。

おすすめ記事