Como posso executar um script na inicialização? -- boot campo com shell campo com scripts camp android Relacionado O problema

How can I run a script on boot?


54
vote

problema

português

Estou acostumado a executar scripts na inicialização no Linux, mas não sei como fazer isso no Android. Eu gostaria de começar meu daemon ssh no início, então eu sempre serei capaz de me conectar. Como posso executar um script arbitrário na inicialização do Android? Seria preferível fazer isso fora de Dalvik.

Inglês Original

I'm accustomed to running scripts on boot in Linux, but I'm not sure how to do this in Android. I'd like to start my SSH daemon on start, so I'll always be able to connect. How can I run an arbitrary script on Android boot? It'd be preferable to do this outside of Dalvik.

        

Lista de respostas

44
 
vote
vote
Melhor resposta
 

Ao olhar em volta do meu sistema de arquivos Android, descobri que, de fato, ter um diretório /etc/init.d/ . Depois de espreitar lá, encontrei /etc/init.d/20userinit com as seguintes linhas:

  if [ -e /data/local/userinit.sh ]; then      log -p -i -t userinit "Executing /data/local/userinit.sh";     busybux chmod +x /data/local/userinit.sh;     logwrapper /system/bin/sh /data/local/userinit.sh;     setprop cm.userinit.active 1; fi;    

Este ser, é claro, exatamente O que eu precisava, escrevi o seguinte script no meu computador, em seguida, empurrado para o meu dispositivo:

  #!/system/bin/sh   dropbear -s -g     

(empurrado para o dispositivo via scp userinit.sh phone:/data/local/userinit.sh , mente:])

reinicializou o dispositivo e, em seguida, corrija ps | grep "[d]ropbear" e com certeza, está em execução. Fresco!

 

While looking around my Android filesystem, I found that it did, in fact have a /etc/init.d/ directory. After peeking around in there, I found /etc/init.d/20userinit with the following lines:

if [ -e /data/local/userinit.sh ]; then      log -p -i -t userinit "Executing /data/local/userinit.sh";     busybux chmod +x /data/local/userinit.sh;     logwrapper /system/bin/sh /data/local/userinit.sh;     setprop cm.userinit.active 1; fi; 

This being, of course, exactly what I needed, I wrote the following script on my computer then pushed it to my device:

#!/system/bin/sh   dropbear -s -g  

(pushed to device via scp userinit.sh phone:/data/local/userinit.sh, mind you :] )

Rebooted the device, then ran ps | grep "[d]ropbear", and sure enough, it's running. Coolness!

 
 
 
 
9
 
vote

/data/init.sh Executa na inicialização, se você tiver root, você pode editá-lo como quiser. Tenha cuidado;)

Edit: Aparentemente, talvez seja necessário colocar o script editado na imagem de inicialização também. Info sobre como fazer isso aqui: http://forum.xda-developers.com/showthread.php? t = 443994

 

/data/init.sh runs at boot, if you have root you can edit it as you like. Be careful ;)

Edit: Apparently you might need to shoehorn the edited script into the boot image as well. Info on how to do that here: http://forum.xda-developers.com/showthread.php?t=443994

 
 
         
         
4
 
vote

Procure para /etc/ diretório. Normalmente, é colocado em ABCDEFGHIJKLMNABCDEFGHIJKLMN8 Que você pode montar como RW:

  $ ls -l /etc lrwxrwxrwx 1 root root 11 Jan 1  2009 /etc -> /system/etc $ su $ mount -o remount,rw /system $ chmod o+w /system/etc  # for "adb push"    

Alguns passos acima podem ser substituídos por:

  /etc/init.d/20userinit0   

e depois remontagem RO:

  /etc/init.d/20userinit1   

Agora sua tarefa para encontrar executável ou /etc/init.d/20userinit2 arquivo que você modifica para atingir sua meta:

  /etc/init.d/20userinit3   

Google sobre cada candidato para saber como este arquivo foi usado.

Bom candidato para incluir scripts personalizados são linhas de:

  /etc/init.d/20userinit4   

Como cada dispositivo exclusivo, você pode precisar fazer o próprio palpite sobre os critérios de pesquisa ...

Por exemplo, encontrei /etc/init.d/20userinit5 que usado por Korn Shell. Eu atualizo este arquivo para estender /etc/init.d/20userinit6 fever e agora cada vez que eu faço /etc/init.d/20userinit7 eu tenho links simpáticos no meu caminho!

ver também maneira difícil (se você não tem sorte com encontrar mago arquivo): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc

 

Look to /etc/ directory. Usually it is placed in /system/ partition which you can mount as RW:

$ ls -l /etc lrwxrwxrwx 1 root root 11 Jan 1  2009 /etc -> /system/etc $ su $ mount -o remount,rw /system $ chmod o+w /system/etc  # for "adb push" 

Some above steps may be replaces with:

$ adb root $ adb remount 

and later remount RO:

$ chmod o-w /system/etc $ mount -o remount,ro /system 

Now your task to find executable or *rc file which you modify to achieve your goal:

$ find /etc -type f -perm +110 $ find /etc -name "*rc" $ find /etc -name "init*" $ grep -R /data /etc $ grep -R /system /etc 

Google about each candidate to get know how this file was used.

Good candidate for including custom scripts are lines from:

$ grep service /init*.rc 

As each device unique you may need to do own guess about search criteria...

For example I found /etc/mkshrc which used by Korn shell. I update this file to extend PATH env var and now each time I do adb shell I have Busybox symlinks in my PATH!

See also hard way (if you have no luck with finding magic file): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc

 
 
   
   
1
 
vote

Eu tentei todos esses métodos e nenhum deles funcionou para mim. O que funcionou, no entanto, foi baseado na resposta do Lord-Ralf - Adolf aqui Como executar um script na inicialização em cm12. 1?

Basicamente, encontre o arquivo /etc/init.d/20userinit8 e adicione a seguinte linha no início /etc/init.d/20userinit9

então

  if [ -e /data/local/userinit.sh ]; then      log -p -i -t userinit "Executing /data/local/userinit.sh";     busybux chmod +x /data/local/userinit.sh;     logwrapper /system/bin/sh /data/local/userinit.sh;     setprop cm.userinit.active 1; fi; 0   

Feito! Agora você pode colocar o que quiser em if [ -e /data/local/userinit.sh ]; then log -p -i -t userinit "Executing /data/local/userinit.sh"; busybux chmod +x /data/local/userinit.sh; logwrapper /system/bin/sh /data/local/userinit.sh; setprop cm.userinit.active 1; fi; 1 e será executado na inicialização. Se o arquivo if [ -e /data/local/userinit.sh ]; then log -p -i -t userinit "Executing /data/local/userinit.sh"; busybux chmod +x /data/local/userinit.sh; logwrapper /system/bin/sh /data/local/userinit.sh; setprop cm.userinit.active 1; fi; 2 não estiver no seu sistema, esta resposta não funcionará para você. Não se preocupe com a criação.

 

I tried all these methods and none of them worked for me. What worked however was based on lord-ralf-adolf's answer here How to run a script on boot in CM12.1?

basically, find the file /system/etc/install-recovery.sh and add the following line at the beginning /data/init.sh &

then

touch /data/init.sh chmod 755 /data/init.sh 

Done! You can now put whatever you want in /data/init.sh and it will run on startup. If the file /system/etc/install-recovery.sh is not in your system then this answer won't work for you. Don't bother creating it.

 
 
   
   
1
 
vote

Se você tiver magisk instalado, você pode colocar o .SH para:

.

/sbin/.magisk/img/.core/service.d /

ou para

.

/sbin/.magisk/img/.core/post-fs-data.d /

Não se esqueça de torná-lo executável: chmod +x your-script.sh .

Mais informações: https: // github. com / topjohnwu / magisk / blob / mestre / docs / guias.md # boot-scripts

 

If you have magisk installed you can place the .sh to:

/sbin/.magisk/img/.core/service.d/

or to

/sbin/.magisk/img/.core/post-fs-data.d/

Don't forget to make it executable: chmod +x your-script.sh.

More info: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts

 
 
1
 
vote

As coisas eram simples antes do Android 5 quando o Selinux não foi enforcing . Você pode colocar seu código em qualquer script ou substituir um binário por script que foi executado com privilégios de raiz na inicialização. Outro método foi para definir um serviço de ABCDEFGHIJKLMNABCDEFGHIJKLMN2 Especificamente para Lote Execute Scripts de algum diretório.

Com base nessas abordagens Custom ROM desenvolvedores introduzidos diferentes pseudo- abcdefghijklmn4 fenômeno como /etc/init.d/ , /etc/install-recovery.sh , < code> /etc/init.qcom.post_boot.sh , /system/bin/debuggerd , /data/init.sh , /data/local/userinit.sh , enforcing0 etc.

No entanto, um processo em execução com o UID enforcing1 mas em um contexto restrito do SELinux é bastante indefeso. Um serviço iniciado em enforcing2 arquivo com enforcing3 contexto não pode se executar Um script de shell de enforcing4 , portanto, a política do Selinux precisa ser corrigida para injetar um contexto, por exemplo, Magisk define enforcing5 . Depois disso, é possível executar um script diretamente como enforcing6 serviço ou de enforcing7 -like o diretório.

Para detalhes, veja Como executar um executável na inicialização e mantê-lo em funcionamento?

 

Things were simple before Android 5 when SELinux wasn't enforcing. You could put your code in any script or replace a binary with script which was executed with root privileges on boot. Another method was to define a custom init service specifically to batch execute scripts from some directory.

Based on these approaches custom ROM developers introduced different pseudo-init.d phenomenon like /etc/init.d/, /etc/install-recovery.sh, /etc/init.qcom.post_boot.sh, /system/bin/debuggerd, /data/init.sh, /data/local/userinit.sh, /data/local/init.d/ etc.

However a process running with UID 0 but in a restricted SELinux context is quite helpless. A service started in init.rc file with u:r:init:s0 context can't even execute a shell script from /system/bin/, so SELinux policy needs to be patched to inject an unrestricted context e.g. Magisk defines u:r:magisk:s0. After that it's possible to run a script directly as init service or from init.d-like directory.

For details see How to run an executable on boot and keep it running?

 
 
0
 
vote

maneira simples (trabalho):

    .
  1. Prepare seus comandos post boot em um script, digite / System / Xbin / Post-boot (Set Exec Perm)

  2. Adicione o caminho de script personalizado acima no final do /system/etc/init.qcom.post_boot.sh

por exemplo:

ECHO / SYSTEM / XBIN / POST-boot & gt; & gt; /system/etc/init.qcom.post_boot.sh

Feito!

(se você não consegue encontrar os dispositivos QCOM Post_Boot (Qualcomm), procure qualquer scripts post_boot)

 

Simple way (working):

  1. Prepare your post boot commands in a script, say /system/xbin/post-boot (set exec perm)

  2. Add the above custom script path at the end of /system/etc/init.qcom.post_boot.sh

Eg:

echo /system/xbin/post-boot >> /system/etc/init.qcom.post_boot.sh

Done!

(If you can't find the qcom post_boot (Qualcomm devices), look for any post_boot scripts)

 
 

Perguntas relacionadas

1  Como definir a frequência da CPU o mais cedo possível?  ( How to set cpu frequency as early as possible ) 
O que quero dizer com esta questão é a sequência de execução de scripts no momento da inicialização. Suponha que eu tenha esta linha de script: echo 3070...

0  Android não inicializa por causa dos arquivos APK ausentes na pasta System / App  ( Android does not boot because of missing apk files in system app folder ) 
Eu movi a pergunta de https://stackoverflow.com/q/15872848/1665807 Eu tenho um telefone Huawei U8825D de raiz. Eu quero saber se não houve arquivos APK ...

36  ADB pode descobrir dispositivos, mas não fastboot  ( Adb can discover devices but not fastboot ) 
Eu já procurei na web sobre esse problema e geralmente é resolvido instalando os drivers apropriados. Problema é que estou em um Mac. Quando eu conectar meu...

0  Ligar ao carregar, mas somente quando o nível da bateria é maior que 20%  ( Power on when charging but only when battery level is greater than 20 ) 
Eu tentei recentemente para encaixar um tablet no meu carro e me deparei com um problema com acordar o dispositivo sem usar o botão liga / desliga. Minha so...

4  Android Restore Bootstrap Nandroid Backup após um flash ROM com falha  ( Android restore bootstrap nandroid backup after a failed rom flash ) 
Eu estava tentando piscar meu droid x2 para cm7, mas falhou. Antes de tentar o flash, fiz um backup nandroid usando um aplicativo chamado "Recuperação do sist...

1  Como executar um aplicativo na inicialização no fundo  ( How to run an app on startup in background ) 
Como executar um aplicativo na inicialização no fundo? Por exemplo, Kaspersky correr em startup, bem como mostrar na bandeja de barra de notificação. Eu quero...

2  Samsung Galaxy s preso no loop de inicialização quando 100% cobrado  ( Samsung galaxy s stuck in boot loop when 100 charged ) 
Antes de começarmos que devemos mencionar que não mexi com o firmware de qualquer maneira. Mas parece que sempre que eu coloco no comando e atinge 100% de cap...

3  Tempo de inicialização longo no favo de mel  ( Long boot time in honeycomb ) 
Acabei de receber um Motorola Xoom, amá-lo até agora, mas me surpreende que a inicialização inicial do dispositivo demore tanto tempo (aproximadamente 1 minut...

4  G1 incapaz de passar o logotipo do Android Boot  ( G1 unable to get past android boot logo ) 
Eu tenho um T-Mobile G1 (HTC Dream), esta manhã vibrou uma vez e, em seguida, reiniciou, então foi para o logotipo de inicialização do Android passou por isso...

0  Como montar userdata_b em stot_a no dispositivo de partição A / B?  ( How to mount userdata b in stot a in a b partition device ) 
Eu tenho um Tissot (MI A1) com o Twrp Dual Booted, separando Vendor_A, Vendor_B, USERDATA_A, userdata_b. É duplo inicializado pelo Twrp do Cosmicdan com Remix...

5  Iniciar serviços na inicialização [duplicate]  ( Start services at boot ) 
. Esta pergunta já tem uma resposta aqui : Abra um aplicativo na inicialização / após a inicialização...

1  Como um comprimido é ativado automaticamente quando uma fonte de energia está conectada?  ( How does a tablet automatically power on when a power source is connected ) 
Por favor, imagine uma situação de carro onde você tem um tablet Android: http://content.worldcarfans.co/2014 /11/24/thumbnails/24486128385597.hl2.jpg e...

1  Telefone preso no modo Fastboot, não é possível inicializar no sistema operacional ou no modo de recuperação e a ROM de estoque piscando não ajuda  ( Phone stuck in fastboot mode cant boot into os or recovery mode and flashing s ) 
Quando tentei reiniciar meu telefone há alguns dias atrás, ele inicializou no modo CSC Fastboot e não pôde inicializar no sistema operacional. Eu tentei volta...

4  Meu dispositivo Android inicializa em uma partição "stealth"?  ( Is my android device booting into a stealth partition ) 
OK, este é um problema estranho que estou encontrando com um sistema Android Eu tenho usado sem problemas por vários anos agora ... e estou praticamente fora ...

2  Android 2.2 - Como ver os aplicativos que são executados no Start-up [Duplicate]  ( Android 2 2 how to see applications that run at start up ) 
. Esta pergunta já tem respostas aqui : fechado 10 anos atrás . . Duplicado possível: Como po...




© 2021 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.