システム起動時にネットワークパラメータを変更するサービスの作成中に問題が発生する

システム起動時にネットワークパラメータを変更するサービスの作成中に問題が発生する

システム起動時にネットワークカードを1Gに設定するスクリプトを作成しました。このために新しいサービスを作成しましたが、うまくいきません。

起動を実行するとこのエラーが発生し、ネットワーク速度は変わりません。

$ systemctl start service activar_a_1G_enp3s0.service
Failed to start service.service: Unit service.service not found.
$ 

これは私の.serviceファイルです(聞いてから3つを使用しました)。

cat activar_a_1G_enp3s0.service
[Unit]
Description=Activa1GRed
#After=multi-user.target
#After=network.target 
After=NetworkManager.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/activar_a_1G_enp3s0.sh

[Install]
WantedBy=default.target

shファイルは(手動で実行するとうまく動作します)

$ ls -la /usr/local/bin/activar_a_1G_enp3s0.sh
-rwxr-xr-x. 1 root root 433 nov 22 22:43 /usr/local/bin/activar_a_1G_enp3s0.sh

$ cat /usr/local/bin/activar_a_1G_enp3s0.sh
#!/bin/bash

# Cambiamos la velocidad de la tarjeta a 1Gb
/usr/sbin/ethtool -s enp3s0 autoneg on 

編集する:

そしてsystemctl は activar_a_1G_enp3s0.service を起動します。サービスは手動で正しく機能しますが、コンピュータを再起動すると機能しなくなり、このエラーが発生します。

$ systemctl status activar_a_1G_enp3s0.service
● activar_a_1G_enp3s0.service - Activa1GRed
     Loaded: loaded (/etc/systemd/system/activar_a_1G_enp3s0.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Mon 2020-11-23 02:34:11 CET; 3min 4s ago
    Process: 1185 ExecStart=/usr/local/bin/activar_a_1G_enp3s0.sh (code=exited, status=0/SUCCESS)
   Main PID: 1185 (code=exited, status=0/SUCCESS)
        CPU: 11ms

nov 23 02:34:05 aqua systemd[1]: Starting Activa1GRed...
nov 23 02:34:06 aqua activar_a_1G_enp3s0.sh[1189]: netlink error: failed to retrieve link settings
nov 23 02:34:06 aqua activar_a_1G_enp3s0.sh[1189]: netlink error: No such device
nov 23 02:34:11 aqua systemd[1]: activar_a_1G_enp3s0.service: Succeeded.
nov 23 02:34:11 aqua systemd[1]: Finished Activa1GRed.

ネットワークが正常に戻るまでサービスの実行をどのように遅らせることができますか?

編集2:

あなたの指示に従い、開始が2分間ネットワーク待機を停止しました。その後、システムが起動しましたが、1G設定は機能しません。速度は100Mb/s起動後。

    Settings for enp3s0:
...
        Speed: 100Mb/s
        Duplex: Half
...
        Link detected: yes
enp3s0: 100 Mbit, half duplex, link ok

起動後にサービスの起動を手動で実行します。

    $ systemctl start activar_a_1G_enp3s0.service
    $ systemctl status activar_a_1G_enp3s0.service
    ● activar_a_1G_enp3s0.service - Activa1GRed
     Loaded: loaded (/etc/systemd/system/activar_a_1G_enp3s0.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Mon 2020-11-23 23:06:53 CET; 3s ago
    Process: 5891 ExecStart=/usr/local/bin/activar_a_1G_enp3s0.sh (code=exited, status=0/SUCCESS)

    nov 23 23:06:48 aqua systemd[1]: Starting Activa1GRed...
    nov 23 23:06:53 aqua systemd[1]: activar_a_1G_enp3s0.service: Succeeded.
    nov 23 23:06:53 aqua systemd[1]: Finished Activa1GRed.

今、正しい速度を得ました。(1000Mb/秒)

Settings for enp3s0:
...
        Speed: 1000Mb/s
        Duplex: Full
...
        Link detected: yes
enp3s0: negotiated 1000baseT-FD flow-control, link ok

       Main PID: 5891 (code=exited, status=0/SUCCESS)
            CPU: 11ms
    

これは enp3s0 の dmesg コマンドの出力です。

$ dmesg|grep enp3s0
[    2.168785] r8169 0000:03:00.0 enp3s0: renamed from eth0
[    4.401733] systemd[1]: Configuration file /etc/systemd/system/activar_a_1G_enp3s0.service is marked world-inaccessible. This has no effect as configuration data is accessible via APIs without restrictions. Proceeding anyway.
[    9.127366] r8169 0000:03:00.0 enp3s0: Link is Down
[   11.801640] r8169 0000:03:00.0 enp3s0: Link is Up - 1Gbps/Full - flow control off
[   11.801647] IPv6: ADDRCONF(NETDEV_CHANGE): enp3s0: link becomes ready
[  129.159287] r8169 0000:03:00.0 enp3s0: Link is Down
[  131.368490] r8169 0000:03:00.0 enp3s0: Link is Up - 100Mbps/Half - flow control off
[  414.549164] r8169 0000:03:00.0 enp3s0: Link is Down
[  417.332359] r8169 0000:03:00.0 enp3s0: Link is Up - 1Gbps/Full - flow control off

ありがとう

ベストアンサー1

systemctl start service activar_a_1G_enp3s0.service


                ^^^^^^^

serviceそれがまさにあなたの問題です。解決してください。

編集1:変更された要件を助けてください。

以下を試してください。

systemctl enable systemd-networkd.service systemd-networkd-wait-online.service

ユニットファイルに以下を追加します。

After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service

もちろん、これが機能することを保証することはできません。 systemdのイベントシーケンスは少し気まぐれです。

おすすめ記事