Comment puis-je exécuter un script au démarrage? -- boot domaine et shell domaine et scripts domain android en relation problème

How can I run a script on boot?



54
vote

problème

français

Je suis habitué à exécuter des scripts au démarrage de Linux, mais je ne sais pas comment faire cela dans Android. Je voudrais démarrer mon démon SSH en début, alors je pourrai toujours connecter. Comment puis-je exécuter un script arbitraire sur la botte Android? Il serait préférable de le faire à l'extérieur de Dalvik.

langue Anglaise

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.

        

Liste de réponses

44
 
vote
vote
Meilleure réponse
 

En regardant autour de mon système de fichiers Android, j'ai constaté que c'était en fait un répertoire 9988777660 . Après avoir regardé là-bas, j'ai trouvé /etc/init.d/20userinit avec les lignes suivantes:

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;

Cet étant, bien sûr, exactement ce dont j'avais besoin, j'ai écrit le script suivant sur mon ordinateur, puis l'a poussé à mon appareil:

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

(poussé au périphérique via scp userinit.sh phone:/data/local/userinit.sh , pensez-vous:])

redémarrait le périphérique, puis ran ps | grep "[d]ropbear" et assez sûr, il fonctionne. La fraîcheur!

 

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 fonctionne au démarrage, si vous avez la racine, vous pouvez le modifier comme vous le souhaitez. Soyez prudent;)

EDIT: Apparemment, vous devrez peut-être aussi faire connaître le script édité dans l'image de démarrage. Info sur la façon de faire cela ici: http://forum.xda-developers.com/showthhead.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

regarder vers /etc/ répertoire. Habituellement, il est placé dans /system/ partition que vous pouvez monter en tant que 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"

Certaines étapes ci-dessus peuvent être remplies avec:

/etc/init.d/20userinit0

et plus tard Remonter RO:

/etc/init.d/20userinit1

Maintenant votre tâche pour trouver exécutable ou 99887776612 fichier que vous modifiez pour atteindre votre objectif:

  /etc/init.d/20userinit3  

Google à propos de chaque candidat pour savoir comment ce fichier a été utilisé.

Un bon candidat pour inclure les scripts personnalisés sont des lignes de:

/etc/init.d/20userinit4

Comme chaque périphérique unique, vous devrez peut-être faire sa propre prévention sur les critères de recherche ...

Par exemple, j'ai trouvé /etc/init.d/20userinit5 utilisé par Korn Shell. Je mettez à jour ce fichier pour étendre 99887776616 env VaR et maintenant chaque fois que je fais /etc/init.d/20userinit7 J'ai des symboles dans mon chemin!

Voir aussi Hard Way (si vous n'avez pas de chance avec la recherche Magic fichier): 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

J'ai essayé toutes ces méthodes et aucun d'entre eux n'a travaillé pour moi. Ce qui a toutefois fonctionné était basé sur la réponse de Lord-Ralf-Adolf ici Comment exécuter un script au démarrage en cm12. 1?

Fondamentalement, trouvez le fichier /etc/init.d/20userinit8 et ajoutez la ligne suivante au début /etc/init.d/20userinit9

alors

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

fait! Vous pouvez maintenant mettre tout ce que vous voulez dans 99887776621 et il fonctionnera au démarrage. Si le fichier 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'est pas dans votre système, cette réponse ne fonctionnera pas pour vous. Ne vous embêtez pas la création.

 

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 vous avez magisk installé, vous pouvez placer le .sh à:

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

ou à

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

N'oubliez pas de le rendre exécutable: 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; 3 .

Plus d'info: https: // github. com / topjohnwu / magisk / blob / maître / docs / guides.md # scripts de démarrage

 

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

Les choses étaient simples avant Android 5 quand Selinux n'était pas enforcing . Vous pouvez mettre votre code dans n'importe quel script ou remplacer un binaire avec un script exécuté avec des privilèges root au démarrage. Une autre méthode consistait à définir un service personnalisé 9988777661 spécifiquement aux scripts d'exécution par lots à partir d'un répertoire.

Sur la base de ces approches, les développeurs de ROM personnalisés ont introduit différents pseudo- 9988777662 phénomène comme /etc/init.d/ , /etc/install-recovery.sh , < Code> /etc/init.qcom.post_boot.sh , /system/bin/debuggerd , /data/init.sh , /data/local/userinit.sh , /data/local/init.d/ etc.

Cependant, un processus fonctionnant avec UID init0 mais dans un contexte SELINUX restreint est assez impuissant. Un service démarré dans 99887776611 fichier avec 99887776612 contexte ne peut même pas exécuter un script shell à partir de init3 , la stratégie SELINUX doit donc être corrigée pour injecter un contexte sans restriction , par exemple Magisk Définit init4 . Après cela, il est possible d'exécuter un script directement sous le nom 99887776615 ou à partir de init6 -Inty Annuaire.

Pour plus de détails, voir Comment exécuter un exécutable au démarrage et le garder en marche?

 

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

manière simple (fonctionnel):

  1. Préparez vos commandes de démarrage Post dans un script, Say / System / Xbin / Post-Boot (Set Exec Perm)

  2. ajoutez le chemin de script personnalisé ci-dessus à la fin de /ystem/etc/init.qcom.post_boot.sh

EG:

ECHO / SYSTEM / XBIN / POST-BOOT & GT; & GT; /ystem/etc/init.qcom.post_boot.sh

fait!

(Si vous ne trouvez pas la touche qcom post_boot (périphériques Qualcomm, recherchez des 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)

 
 

Questions connexes

9  Sur Android puis-je écrire des scripts (similaires à gagnez des fichiers .bat) pour combiner plusieurs commandes de ligne de commande?  ( On android can i write scripts similar to win bat files to combine several co ) 
sur Windows, je peux exécuter deux commandes à l'aide d'un fichier .bat. Comment puis-je obtenir la même chose sur Android Par exemple: Mettez à jour me...

1  Comment faire de la longue pression dans Android 4.1.2 et 4.2.2 à l'aide de ADB?  ( How to long press in android 4 1 2 and 4 2 2 using adb ) 
J'ai découvert que la commande ci-dessous n'exécute pas dans Android 4.1.2 et 4.2.2, mais elle s'exécute de Android 4.4 +. input touchscreen swipe x1 y1 x2...

0  Où sont installés des binaires?  ( Where are binaries installed ) 
i juste récemment enraciné mon téléphone afin que je puisse installer sl4a. Je souhaite exécuter certaines commandes via un script Python, désactivez spécifiq...

3  Exécution de votre propre script .sh à Vold.Decrypt = trigger_shutdown_framework via init.rc (Android 5.0)  ( Running your own sh script at vold decrypt trigger shutdown framework via init ) 
Je veux contourner un bogue de fournisseur dans un téléphone Android 5.0 (chinois, mtk, pas de source appropriée) Le problème est dû à un bogue dans certain...

54  Comment puis-je exécuter un script au démarrage?  ( How can i run a script on boot ) 
Je suis habitué à exécuter des scripts au démarrage de Linux, mais je ne sais pas comment faire cela dans Android. Je voudrais démarrer mon démon SSH en début...

0  Comment exécuter un script sur un appareil Android enraciné?  ( How to run a script on a rooted android device ) 
Nous avons récemment déployé de nombreux appareils Android à l'intérieur de l'affichage de la page Web personnalisée uniquement. DISPOSITIF: RKM MK902 OS...

1  Comment définir la fréquence de la CPU le plus tôt possible?  ( How to set cpu frequency as early as possible ) 
Ce que je veux dire par cette question est la séquence d'exécution des scripts au démarrage. Supposons que j'ai cette ligne de script: echo 307000 > /sys...

3  Comment exécuter un exécutable au démarrage et le garder en marche?  ( How to run an executable on boot and keep it running ) 
J'ai une version exécutable à partir d'un programme ndk-build . Je veux l'exécuter sur un appareil Android enraciné. Quelle est la possibilité que Android tu...

1  Comment créer un fichier update.zip pouvant copier et renommer un fichier?  ( How to create an update zip file that can copy rename a file ) 
Voici exactement ce que je recherche - j'ai besoin d'un fichier 'update.zip' qui peut copier un fichier (exemple): /system/framework/file-to-copy.apk à un...

2  Comment puis-je scripter mon téléphone?  ( How do i script my phone ) 
Ce que je veux surtout faire, c'est rapidement modifier les paramètres, ajouter des alarmes, etc. C'est peut-être appelé quelque chose d'autre? Ceci est à...




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés