¿Cómo puedo ejecutar un script en el arranque? -- boot campo con shell campo con scripts camp android Relacionados El problema

How can I run a script on boot?


54
vote

problema

Español

Estoy acostumbrado a ejecutar scripts en el arranque en Linux, pero no estoy seguro de cómo hacerlo en Android. Me gustaría comenzar mi demonio ssh en principio, así que siempre podré conectarme. ¿Cómo puedo ejecutar un script arbitrario en el arranque de Android? Sería preferible hacer esto fuera de Dalvik.

Original en ingles

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 respuestas

44
 
vote
vote
La mejor respuesta
 

Mientras mira alrededor de mi sistema de archivos Android, descubrí que, de hecho, tiene un directorio /etc/init.d/20userinit con las siguientes líneas:

  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, por supuesto, exactamente lo que necesitaba, escribí el siguiente script en mi computadora, luego lo empujé a mi dispositivo:

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

(empujado al dispositivo a través de scp userinit.sh phone:/data/local/userinit.sh , Mind You:])

Reinició el dispositivo, luego corrió ABCDEFGHIJKLMNABCDEFGHIJKLMN5 , y seguro, se está ejecutando. ¡Coolness!

 

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

ABCDEFGHIJKLMNABCDEFGHIJKLMN6 se ejecuta en el arranque, si tiene root, puede editarlo como desee. Ten cuidado;)

Editar: Aparentemente es posible que necesite calzar el script editado también en la imagen de arranque. Información sobre cómo hacer eso aquí: 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

Busque ABCDEFGHIJKLMNABCDEFGHIJKLMN7 directorio. Por lo general, se coloca en ABCDEFGHIJKLMNABCDEFGHIJKLMN8 Partition que puede montar como RW:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN9   

Se pueden reemplazar algunos pasos anteriores:

  /etc/init.d/20userinit0  

y posterior remount RO:

  /etc/init.d/20userinit1  

Ahora su tarea para encontrar el archivo ejecutable o ABCDEFGHIJKLMNABCDEFGHIJKLMN12

que modifica para lograr su objetivo:
  /etc/init.d/20userinit3  

Google sobre cada candidato para saber cómo se usó este archivo.

El buen candidato para incluir scripts personalizados son líneas de:

  /etc/init.d/20userinit4  

Como cada dispositivo único, es posible que deba hacer propias conjeturas sobre los criterios de búsqueda ...

Por ejemplo, encontré /etc/init.d/20userinit5 que usaba por Korn Shell. Actualizo este archivo para ampliar /etc/init.d/20userinit6 env v y ahora cada vez que hago /etc/init.d/20userinit7 ¡Tengo un enlace simbólico en mi camino!

ver también hard wants (si no tiene suerte con la búsqueda mágica ): https://stackoverflow.com/questions/9768103/make-persistent-changes-a-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

Intenté todos estos métodos y ninguno de ellos funcionó para mí. Lo que funcionó sin embargo se basó en la respuesta de Lord-Ralf-Adolf aquí Cómo ejecutar un script en el arranque en CM12. 1?

Básicamente, encuentra el archivo ABCDEFGHIJKLMNABCDEFGHIJKLMN18 y agregue la siguiente línea al principio ABCDEFGHIJKLMNABCDEFGHIJKLMN19

luego

  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  

hecho! Ahora puede colocar lo que desee en 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 y se ejecutará en el inicio. Si el archivo 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 no está en su sistema, esta respuesta no funcionará para usted. No te molestes en crearlo.

 

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

Si tiene magisk instalado, puede colocar el .sh a:

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

o a

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

No olvides hacerlo ejecutable: chmod +x your-script.sh .

Más información: https: // github. com / topjohu / magisk / blob / master / docs / guides.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

Las cosas fueron simples antes de Android 5 cuando SELINUX no fue enforcing . Puede poner su código en cualquier script o reemplazar un binario con script que se ejecutó con privilegios de raíz en el arranque. Otro método fue definir un servicio personalizado ABCDEFGHIJKLMNABCDEFGHIJKLMN2 específicamente a los scripts Ejecutar por lotes de algún directorio.

Basado en estos enfoques Custom ROM Los desarrolladores introducidos diferentes Pseudo- ABCDEFGHIJKLMNABCDEFGHIJKLMN3 /etc/init.d/ , abcdefhijklmnabcdefghijklmn5 , < code> /etc/init.qcom.post_boot.sh , /system/bin/debuggerd , /data/init.sh , /data/local/userinit.sh , enforcing0 , etc.

Sin embargo, un proceso que se ejecuta con UID ABCDEFGHIJKLMNABCDEFGHIJKLMN11 , pero en un contexto de Selinux restringido es bastante indefenso. Un servicio comenzó en ABCDEFGHIJKLMNABCDEFGHIJKLMN12 Archivo con ABCDEFGHIJKLMNABCDEFGHIJKLMN13 CONTEXTO ni siquiera puede ejecutar un script shell de enforcing4 , por lo que la política de SELINUX debe ser parcheada para inyectar un contexto sin restricciones . MAGISK define enforcing5 . Después de eso, es posible ejecutar un script directamente como ABCDEFGHIJKLMNABCDEFGHIJKLMN16 SERVICIO O DE ABCDEFGHIJKLMNABCDEFGHIJKLMN17 - Página de directorio.

Para obtener más información, consulte ¿Cómo ejecutar un ejecutable en el arranque y mantenerlo en funcionamiento?

 

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

forma sencilla (trabajando):

  1. Prepare sus comandos de inicio postal en un script, digamos / Sistema / Xbin / Post-Foot (Set Exec Perm)

  2. Agregue la ruta de script personalizada anterior al final de /system/etc/init.qcom.post_boot.sh

por ejemplo:

Echo / System / Xbin / Post-Boot & GT; & GT; /system/etc/init.qcom.post_boot.sh

hecho!

(Si no puede encontrar el QCOM POST_BOOT (Qualcomm Dispositivos), busque cualquier 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)

 
 

Relacionados problema

1  ¿Cómo se enciende automáticamente una tableta cuando se conecta una fuente de alimentación?  ( How does a tablet automatically power on when a power source is connected ) 
POR FAVOR, imagine una situación de automóvil donde tenga una tableta Android: http://content.worldcarfans.co/2014 /11/24/thumbnails/24486128385597.hl2.jpg...

4  Restaurar Android Bootstrap Nandroid Backup después de un flash ROM fallido  ( Android restore bootstrap nandroid backup after a failed rom flash ) 
Estaba tratando de flashear a mi droid X2 a CM7, pero falló. Antes de intentar el flash, hice una copia de seguridad de Nandroid utilizando una aplicación lla...

2  Android 2.2 - Cómo ver aplicaciones que se ejecutan al inicio [duplicado]  ( Android 2 2 how to see applications that run at start up ) 
Esta pregunta ya tiene respuestas aquí : CERRADO hace 10 años . posible duplicado: ¿Cómo p...

5  Iniciar servicios en el arranque [duplicado]  ( Start services at boot ) 
Esta pregunta ya tiene una respuesta aquí : Abra una aplicación en el inicio / después de arrancar ...

2  Samsung Galaxy S atascado en bucle de botas cuando se le cobra 100%  ( Samsung galaxy s stuck in boot loop when 100 charged ) 
Antes de comenzar, debo mencionar que no me he metido con el firmware de ninguna manera. Pero parece que cada vez que lo pongo a cargo y alcanza el 100% de la...

3  Tiempo de arranque largo en abeja  ( Long boot time in honeycomb ) 
Acabo de recibir un Motorola Xoom, amarlo hasta ahora, pero me sorprende que la bota inicial del dispositivo tome tanto tiempo (aproximadamente 1 minuto). Pen...

36  Adb puede descubrir dispositivos pero no fastboot  ( Adb can discover devices but not fastboot ) 
He buscado en la web sobre este problema y generalmente se resuelve instalando los controladores apropiados. El problema es que estoy en una Mac. Cuando con...

0  ¿Cómo montar userData_B en STOT_A en un dispositivo de partición A / B?  ( How to mount userdata b in stot a in a b partition device ) 
Tengo un Tissot (MI A1) con TWRP Dual Boting al separar Vendor_a, Vendor_B, UserData_A, UserData_B. Es de doble arranque por el TWRP de Cosmicdan con el funci...

0  Android no se inicia debido a los archivos APK faltantes en la carpeta Sistema / Aplicación  ( Android does not boot because of missing apk files in system app folder ) 
Moví la pregunta de https://stackoverflow.com/q/15872848/1665807 Tengo un teléfono enraizado Huawei U8825D. Quiero saber si no hubo archivos APK en la c...

4  ¿Mi dispositivo Android está arranque en una partición de "sigilo"?  ( Is my android device booting into a stealth partition ) 
OK, este es un problema extraño que encuentro con un sistema Android que he estado usando sin problemas durante varios años ... y prácticamente estoy fuera de...

1  El teléfono pegado en el modo Fastboot, no se puede arrancar en modo OS o de recuperación y parpadear Stock ROM no ayuda  ( Phone stuck in fastboot mode cant boot into os or recovery mode and flashing s ) 
Cuando intenté reiniciar mi teléfono hace unos días, se inició en el modo CSC Fastboot y no se pudo iniciar en el sistema operativo. Probé Vol hacia abajo + a...

0  Encendido al cargar, pero solo cuando el nivel de la batería es superior al 20%  ( Power on when charging but only when battery level is greater than 20 ) 
Recientemente he tratado de adaptarme a una tableta en mi auto y me encontré con un problema con despertar el dispositivo sin usar el botón de encendido. Mi...

4  G1 incapaz de pasar el logotipo de inicio de Android  ( G1 unable to get past android boot logo ) 
Tengo un T-Mobile G1 (HTC DREAM), esta mañana vibró una vez y luego se reinició, luego fue al logotipo de Boot Android, pasó por eso y se detuvo en una pantal...

1  ¿Cómo configurar la frecuencia de la CPU lo antes posible?  ( How to set cpu frequency as early as possible ) 
Lo que quiero decir con esta pregunta es la secuencia de ejecución de scripts en el tiempo de arranque. Supongamos que tengo esta línea de script: echo 3...

1  Cómo ejecutar una aplicación en la puesta en marcha en el fondo  ( How to run an app on startup in background ) 
¿Cómo ejecutar una aplicación en la puesta en marcha en el fondo? Por ejemplo, Kaspersky se ejecuta en startup, así como se muestra en la bandeja de la barra ...




© 2021 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos


Licensed under cc by-sa 3.0 with attribution required.