시스템 시작 시 네트워크 매개변수를 변경하는 서비스 생성 중 문제 발생

시스템 시작 시 네트워크 매개변수를 변경하는 서비스 생성 중 문제 발생

시스템 시작 시 네트워크 카드를 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의 이벤트 순서는 약간 변덕스러울 수 있습니다.

관련 정보