起動中に私のスクリプトをビーグルボーンに初期化しようとしています。これには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スクリプトのこの行にエラーがあります。これを削除し、正しいフォルダを検索して再起動したときに自動同期時間をテストします。
2番目の[severe = high] [service]に型フィールドを指定していないため、systemdはtype = simpleと仮定しますが、これは私の操作には適していません。 Type = idleを使用して指定する必要があるすべての周辺機器、サービス、およびターゲットの後にスクリプトを実行する必要があります。
3番目の[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