Como executar o script Bash na inicialização do Linux?

1

Estou executando o Linux 4.9.11-1.0.0 na minha placa de desenvolvimento dual iMX7. Eu tenho um arquivo test.sh que gostaria de executar na inicialização. Atualmente, ele possui apenas um monte de declarações echo (apenas para fins de teste).

Quando eu aperto o interruptor na placa para ligá-lo, vejo um monte de coisas de inicialização aparecerem. Eu gostaria que as instruções echo no meu arquivo test.sh também fossem exibidas nessa seqüência de inicialização na inicialização. Eventualmente, quando isso estiver funcionando, o plano é fazer coisas reais no lugar das instruções simples echo . Eu só quero ter certeza de que o script está sendo executado na inicialização neste momento.

Até agora, criei o arquivo test.sh e posso executá-lo manualmente depois que a placa foi inicializada. Eu adicionei o seguinte ao meu arquivo /etc/rc.local antes da declaração de saída no final:

sh '/home/root/test.sh'

Eu verifiquei que esse arquivo rc.local tem #!/bin/sh -e na parte superior. Eu também fiz:

$ chown root /etc/rc.local
$ chmod 777 /etc/rc.local

Quando tudo isso foi concluído, verifiquei que ele deveria estar funcionando corretamente digitando:

$ /etc/init.d/rc.local start

Tudo está funcionando como esperado até este momento e estou vendo as instruções echo quando faço essa última etapa. No entanto, quando vou tentar reinicializar o fórum, não vejo as instruções echo no material de inicialização impresso.

O que estou perdendo? Talvez ele esteja sendo executado na inicialização, mas eu não vejo a saída por algum motivo?

    
por ALec 24.07.2018 / 22:59

2 respostas

0

Se você tiver feito tudo como chmod +x /etc/rc.local , seu comando está em execução, não está sendo registrado em lugar algum que você possa ver.

Exemplo

Este é o meu /etc/rc.local :

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick"

Aqui eu usei o Bash modificado que registra no syslog que discuti neste outro U & L Q & A intitulado: Enviando o histórico bash para o syslog .

Quando meu sistema inicializa, vejo a seguinte mensagem sendo registrada via Bash:

/var/log/bash-log/127.0.0.1.log:2018-07-24T22:04:24.609094-04:00 centos7 rc.local: hickory stick

Mas não onde mais. Para fazer isso, registre-se no syslog / rsyslog e você pode usar o comando logger para fazer isso:

$ logger hi

Você pode ver isso em /var/log/messages ou /var/log/syslog ou journal -xef . Aqui estou usando o journald:

$ journalctl -xef
Jul 24 20:23:04 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=man logger
Jul 24 20:23:24 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=logger hi
Jul 24 20:23:24 centos7 vagrant[1811]: hi

Você deve ser capaz de usar logger para capturar a saída de comandos em scripts como:

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick" | logger

Agora, quando reiniciarmos:

$ journalctl -xef
...
Jul 24 20:31:41 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=journalctl -xe
Jul 24 22:24:00 centos7 logger[1286]: hickory stick
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22.
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22.
Jul 24 22:24:00 centos7 systemd[1]: Starting Permit User Sessions...

Nós vemos nossa mensagem por meio de logger que adicionamos a /etc/rc.local .

Informação extra

logger é bastante útil e você pode fazer isso com um arquivo em vez de usar a opção -f , você também pode controlar a tag que aparece nos registros com a opção -t .

$ logger -t "smurfs" hi
$ journalctl -xe | grep smurfs
Jul 24 20:38:24 centos7 smurfs[1764]: hi

Referências

por 25.07.2018 / 02:34
0

Já tentou colocá-lo no seu .bash_profile? Este é um arquivo que é executado no login. Por isso, ele não liga quando todos fazem login ou tecnicamente na inicialização ... mas, se você estiver usando um usuário, isso pode ser uma solução simples para o que você precisa.

Vá para o seu diretório home, que se você é root é realmente / root não / home / root (pelo menos na distro que eu conheço. Talvez "echo $ HOME" para confirmar seu diretório home.)

Uma vez lá, faça:

ls -la

Deverá ver um arquivo oculto chamado .bash_profile Abra e dê uma olhada. A maioria tem algumas instruções comentadas. Você pode executar seu script diretamente ou apenas invocá-lo com:

sh '/home/root/test.sh'

    
por 24.07.2018 / 23:53

Tags