Wie kann ich ein Skript beim Booten ausführen? -- boot Bereich und shell Bereich und scripts Bereich android verbunden Problem

How can I run a script on boot?



54
vote

Problem

Deutsch

Ich bin daran gewöhnt, Skripts beim Start in Linux zu leiten, aber ich bin mir nicht sicher, wie dies in Android geht. Ich möchte meinen SSH-Daemon beim Start beginnen, sodass ich immer verbinden kann. Wie kann ich ein willkürliches Skript am Android-Boot ausführen? Es wäre vorzuziehen, dies außerhalb von Dalvik zu tun.

Englische Sprache

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.

        

Antwortliste

44
 
vote
vote
Beste Antwort
 

Während ich mich um mein Android-Filesystem sah, habe ich festgestellt, dass es tatsächlich ein Verzeichnis /etc/init.d/ hat. Nachdem ich dabei spähst, fand ich /etc/init.d/20userinit mit den folgenden Zeilen:

  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;   

Dies ist natürlich genau was ich brauchte, ich habe das folgende Skript auf meinem Computer geschrieben und dann auf mein Gerät gedrückt:

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

(an das Gerät über scp userinit.sh phone:/data/local/userinit.sh gedrückt, deinen Mind Sie:]) ​​

Neustart des Geräts, dann rannte /data/init.sh5 , und so läuft es läuft. 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

/data/init.sh läuft beim boot, wenn Sie root haben, können Sie es so bearbeiten, wie Sie möchten. Seien Sie vorsichtig;)

edit: Anscheinend müssen Sie möglicherweise das bearbeitete Skript in das Boot-Bild anscheuen. Info darüber, wie folgt das hier: 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

Schauen Sie auf /etc/ Verzeichnis. Normalerweise wird es in 99887776688 Teilung platziert, die Sie als RW montieren können:

  $ 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"   

Einige obige Schritte können ersetzt mit:

  /etc/init.d/20userinit0  

und später remount ro:

  /etc/init.d/20userinit1  

Jetzt können Sie Ihre Aufgabe ausführbar oder /etc/init.d/20userinit2 finden, die Sie ändern, um Ihr Ziel zu erreichen:

  /etc/init.d/20userinit3  

Google über jeden Kandidaten, um wissen, wie diese Datei verwendet wurde.

Guter Kandidat für einschließlich benutzerdefinierter Skripts sind Zeilen von:

  /etc/init.d/20userinit4  

Wenn jedes Gerät eindeutig ist, müssen Sie möglicherweise ein eigenes Erraten über Suchkriterien machen ...

Beispielsweise fand ich /etc/init.d/20userinit5 die von Korn Shell verwendet wird. Ich aktualisiere diese Datei, um /data/init.sh16 env var und Jetzt jedes Mal zu erweitern, wenn ich /etc/init.d/20userinit7 habe ich habe busybox Symlinks in meinem Pfad!

Siehe auch harte Art (wenn Sie kein Glück mit dem Finden von magic -Datei): https://stackoverflow.com/questions/9768103/make-persistent-changes-nach-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

Ich habe alle diese Methoden ausprobiert, und keiner von ihnen arbeitete für mich. Was funktionierte, basierte hier auf der Antwort von Lord-Ralf-Adolf hier So führen Sie ein Skript beim Booten in CM12 aus. 1?

Grundsätzlich finden Sie die Datei /etc/init.d/20userinit8 und fügen Sie am Anfang die folgende Zeile hinzu /etc/init.d/20userinit9

dann

  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  

Fertig! Sie können jetzt in 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 setzen, und es wird beim Start ausgeführt. Wenn die Datei 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; 22 nicht in Ihrem System ist, funktioniert diese Antwort nicht für Sie. Machen Sie sich keine Mühe, es zu schaffen.

 

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

Wenn Sie magisk installiert haben, können Sie die .SH auf:

platzieren

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

oder auf

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

Vergessen Sie nicht, es ausführbar zu machen: 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 .

mehr Info: https: // github. com / topjohnwu / magisk / blob / master / docs / guides.md # boot-skripts

 

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

Dinge waren vor Android 5 einfach, als Selinux nicht enforcing war. Sie können Ihren Code in ein beliebiges Skript eingeben oder ein Binärdatum durch das Skript ersetzen, das mit root-Berechtigungen für den Start ausgeführt wurde. Eine andere Methode bestand darin, einen benutzerdefinierten 9988777661 speziell zu definieren, um die Skripts aus einem bestimmten Verzeichnis ausführen.

basierend auf diesen Ansätzen, die benutzerdefinierte ROM-Entwickler unterschiedlich sind pseudo- init.d phänomen wie /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/ usw.

Ein Prozess, der mit der UID init0 läuft, jedoch in einem eingeschränkten Selinux-Kontext ist ziemlich hilflos. Ein Dienst startete in init11 file mit init2 context kann nicht einmal ausgeführt werden Ein Shell-Skript von init3 , so dass Selinux-Richtlinie gepatcht werden muss, um einen uneingeschränkten -Kontext zu injizieren, z. Magisk definiert init4 . Danach ist es möglich, ein Skript direkt als init5 service oder von /system/bin/debuggerd15 -ähnliches Verzeichnis auszuführen.

für Details siehe So führen Sie eine ausführbare Datei beim Start aus und halten Sie es laufend?

 

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

Einfache Weise (arbeitet):

    .
  1. Bereiten Sie Ihre Post-Startbefehle in einem Skript auf, sagen / system / xbin / post-boot (Set Exec Perm)

  2. Hinzufügen des obigen benutzerdefinierten Skriptpfads am Ende von /system/etc/init.qcom.post_boot.sh

zB:

ECHO / SYSTEM / XBIN / Post-Boot & GT; & GT; /system/etc/init.qcom.post_boot.sh

fertig!

(Wenn Sie die Qcom Post_boot (Qualcomm-Geräte) nicht finden können, suchen Sie nach beliebigen post_boot-Skripts)

 

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)

 
 

Verwandte Fragen

54  Wie kann ich ein Skript beim Booten ausführen?  ( How can i run a script on boot ) 
Ich bin daran gewöhnt, Skripts beim Start in Linux zu leiten, aber ich bin mir nicht sicher, wie dies in Android geht. Ich möchte meinen SSH-Daemon beim Start...

3  Ausführen von eigenen .sh-Skript bei vold.decrypt = trigger_shutdown_Framework über init.rc (Android 5.0)  ( Running your own sh script at vold decrypt trigger shutdown framework via init ) 
Ich möchte einen Lieferantenfehler in einem Android 5.0-Telefon (Chinesisch, MTK, keine ordnungsgemäße Quelle) Problem ist auf einen Fehler in einigen Binär...

0  So führen Sie ein Skript auf einem verwurzelten Android-Gerät aus?  ( How to run a script on a rooted android device ) 
Wir haben kürzlich viele Android-Geräte intern zur Anpassung der benutzerdefinierten Webseite bereitgestellt. Gerät: RKM MK902 os: Android 4.4.2 verwurze...

3  Wie leitet man eine ausführbare Datei beim Start aus und läuft weiter?  ( How to run an executable on boot and keep it running ) 
Ich habe einen ausführbaren Build aus einem Programm ndk-build . Ich möchte es auf einem verwurzelten Android-Gerät ausführen. Wie hoch ist die Möglichkeit, ...

9  Bei Android kann ich Skripts schreiben (ähnlich wie gewinnen .bat-Dateien), um mehrere Befehlsbefehle zu kombinieren?  ( On android can i write scripts similar to win bat files to combine several co ) 
Unter Windows kann ich zwei Befehle mithilfe einer .bat-Datei ausführen. Wie kann ich das Gleiche auf Android erreichen Beispiel: . Aktualisieren Sie mei...

0  Wo sind Binärdatei installiert?  ( Where are binaries installed ) 
Ich habe gerade mein Handy verwurzelt, also konnte ich SL4A installieren. Ich möchte einige Befehle über ein Python-Skript ausführen, ausdrücklich die Google-...

1  Wie kann man in Android 4.1.2 und 4.2.2 mit ADB lang drücken?  ( How to long press in android 4 1 2 and 4 2 2 using adb ) 
Ich habe festgestellt, dass der Befehl unten in Android 4.1.2 und 4.2.2 nicht ausführt, sondern er ist von Android 4.4 +. input touchscreen swipe x1 y1 x2 ...

1  Wie kann man die CPU-Frequenz bereits so früh wie möglich einstellen?  ( How to set cpu frequency as early as possible ) 
Was ich mit dieser Frage meine Meinung ist, ist die Abfolge der Ausführung von Skripts beim Booten. Angenommen, ich habe diese Skriptlinie: echo 307000 >...

1  So erstellen Sie eine update.zip-Datei, die eine Datei kopieren und umbenennen kann?  ( How to create an update zip file that can copy rename a file ) 
Hier ist genau das, wonach ich suche - ich brauche eine Datei 'update.zip', die eine Datei kopieren kann (Beispiel): /system/framework/file-to-copy.apk in...

2  Wie drücke ich mein Telefon?  ( How do i script my phone ) 
Was ich meistens tun möchte, ändert die Einstellungen schnell, um Alarme usw. hinzuzufügen. Es ist vielleicht etwas anderes angerufen? Dies ist von einem ...




© 2022 www.antworten.top All Rights Reserved. Fragen & Antworten Haus Alle Rechte vorbehalten