Script Beaglebone Debian / jessie autoinit

1

Estou tentando fazer meu script inicializar com beaglebone no processo de inicialização. Para isso, eu uso o processo de inicialização systemctl.

Meu serviço é colocado em /lib/systemctl/system com o nome autostart-scripts.service e o conteúdo é:

[Unit]
Description=Autostart Scripts

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

[Install]
WantedBy=multi-user.target

Como você pode ver, meu script é colocado em hokme e seu conteúdo é:

#!/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

E não está funcionando, eu sigo os passos de registrar o serviço no systemctl com o enable mas por algum motivo ele tem problema na execução no início.

O status do systemctl é este:

● 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'.

Atualização 1:

Eu removi o comando time de sincronização e adiciono After = network-online.target na seção [Unit] e o problema ainda existe. O novo status é este, acho que o problema está relacionado à comunicação em rede. Provavelmente está sendo executado primeiro que outro serviço de rede importante.

[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.
    
por Jefferson Alexis 21.02.2018 / 17:37

1 resposta

0

Eu posso resolver!

Houve 3 problemas no meu trabalho.

1st [critical = low] A pasta do ntpdate não estava correta, por isso meu script sh recebeu um erro nesta linha, removi isso e procurarei a pasta correta e testarei novamente o tempo de sincronização automática de tempo em inicialização.

2nd [critical = high] Eu não especifiquei um campo Type em [Service], portanto o systemd estava assumindo o Type = simple que não está correto para minha tarefa. Preciso que meu script seja executado após todos os periféricos, serviços e metas e para isso preciso especificar com Type = ocioso.

3rd [critical = high] Como eu preciso de comunicação de rede para o meu script, eu preciso adicionar After = network.service em [Unit].

Também dou permissão de execução e faço um recarregamento do daemon. e agora está funcionando. Estou anexando o código do serviço de trabalho.

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

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

[Install]
WantedBy=multi-user.target
    
por 22.02.2018 / 14:29