Beaglebone Debian/jessie 자동 초기화 스크립트

Beaglebone Debian/jessie 자동 초기화 스크립트

시작하는 동안 내 스크립트를 비글본으로 초기화하려고 합니다. 이를 위해 systemctl 초기화 프로세스를 사용합니다.

내 서비스 /lib/systemctl/system이름은 autostart-scripts.service이고 내용은 다음과 같습니다.

[Unit]
Description=Autostart Scripts

[Service]
Type=oneshot
ExecStart=/home/init-usb-internet.sh

[Install]
WantedBy=multi-user.target

보시다시피 내 스크립트는 hokme에 배치되어 있으며 내용은 다음과 같습니다.

#!/bin/sh
echo "Autoconfiguring internet on micro USB connection"
echo "Setting up the default gateway"
/sbin/route add default gw 192.168.7.1

echo "Updating the nameserver entry"
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

echo "Setting the time using the Irish ntp pool"
/usr/bin/ntpdate -b -s -u ie.pool.ntp.org

작동하지 않습니다. systemctl에 서비스를 등록하고 활성화하는 단계를 따랐지만 어떤 이유로 실행을 시작하는 데 문제가 있습니다.

systemctl 상태는 다음과 같습니다.

● autostart-scripts.service - Autostart Scripts
   Loaded: loaded (/lib/systemd/system/autostart-scripts.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2018-02-21 16:26:43 UTC; 7min ago
  Process: 852 ExecStart=/home/init-usb-internet.sh (code=exited, status=127)
 Main PID: 852 (code=exited, status=127)

Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: Autoconfiguring internet on micro USB connection
Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: Setting up the default gateway
Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: SIOCADDRT: Network is unreachable
Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: Updating the nameserver entry
Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: Setting the time using the Irish ntp pool
Feb 21 16:26:42 beaglebone init-usb-internet.sh[852]: /home/init-usb-internet.sh: 10: /home/init-usb-internet.sh: /usr/bin/ntpda
Feb 21 16:26:43 beaglebone systemd[1]: autostart-scripts.service: Main process exited, code=exited, status=127/n/a
Feb 21 16:26:43 beaglebone systemd[1]: Failed to start Autostart Scripts.
Feb 21 16:26:43 beaglebone systemd[1]: autostart-scripts.service: Unit entered failed state.
Feb 21 16:26:43 beaglebone systemd[1]: autostart-scripts.service: Failed with result 'exit-code'.

업데이트 1:

동기화 시간 명령을 제거하고 [Unit] 섹션에 After=network-online.target을 추가했는데 문제가 지속됩니다. 새로운 상태는 이게, 네트워크 통신에 관련된 문제인 것 같아요. 어쩌면 다른 중요한 네트워크 서비스보다 먼저 실행될 수도 있습니다.

[sudo] password for debian:
● autostart-scripts.service - Autostart Scripts
   Loaded: loaded (/lib/systemd/system/autostart-scripts.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Thu 2018-02-22 10:06:07 UTC; 1min 36s ago
  Process: 947 ExecStart=/home/init-usb-internet.sh (code=exited, status=0/SUCCESS)
 Main PID: 947 (code=exited, status=0/SUCCESS)

Feb 22 10:06:07 beaglebone systemd[1]: Starting Autostart Scripts...
Feb 22 10:06:07 beaglebone init-usb-internet.sh[947]: Autoconfiguring internet on micro USB connection
Feb 22 10:06:07 beaglebone init-usb-internet.sh[947]: Setting up the default gateway
Feb 22 10:06:07 beaglebone init-usb-internet.sh[947]: SIOCADDRT: Network is unreachable
Feb 22 10:06:07 beaglebone init-usb-internet.sh[947]: Updating the nameserver entry
Feb 22 10:06:07 beaglebone systemd[1]: Started Autostart Scripts.

답변1

나는 그것을 해결할 수 있다!

내 작업에는 3가지 문제가 있습니다.

첫 번째 [severe=low] ntpdate에는 잘못된 폴더가 있으므로 내 sh 스크립트의 이 줄에 오류가 있습니다. 이를 제거한 다음 올바른 폴더를 검색하고 다시 시작할 때 자동 동기화 시간을 테스트합니다.

두 번째 [severe=high] [service]에 유형 필드를 지정하지 않았기 때문에 systemd는 type=simple로 가정하는데 이는 내 작업에 적합하지 않습니다. Type=idle을 사용하여 지정해야 하는 모든 주변 장치, 서비스 및 대상 후에 스크립트를 실행해야 합니다.

세 번째 [Severe=High] 스크립트에 네트워크 통신이 필요하므로 [Unit]에 After=network.service를 추가해야 합니다.

또한 실행 권한을 부여하고 데몬을 다시 로드했습니다. 이제 작동합니다. 작동하는 서비스 코드를 첨부합니다.

[Unit]
Description=Autostart Scripts
After=network.target

[Service]
Type=idle
ExecStart=/home/init-usb-internet.sh

[Install]
WantedBy=multi-user.target

관련 정보