起動時にスクリプトを実行する方法 -- boot フィールド と shell フィールド と scripts フィールド android 関連 問題

How can I run a script on boot?


54
vote

問題

日本語

Linuxで起動時にスクリプトを実行することに慣れていますが、Androidでこれを行う方法はわかりません。 SSHデーモンを起動時に起動したいので、いつも接続できるようになります。 Android Bootで任意のスクリプトを実行するにはどうすればよいですか?これをダルビクの外側にすることがお待いしています。

英語

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.

        

回答リスト

44
 
vote
vote
ベストアンサー
 

私のAndroidファイルシステムを見回しながら、実際には 99887766554330 ディレクトリを持っていることがわかりました。そこに覗いている後、私は次の行を持つ<コード> /etc/init.d/20userinit を見つけました:

<事前> <コード> #!/system/bin/sh dropbear -s -g 2

これは、もちろん、閉じられたものを必要としているもの、私は私のコンピュータ上で次のスクリプトを書きました、それを私のデバイスにプッシュしました:

 <コード> #!/system/bin/sh   dropbear -s -g    

(<コード> 99887665544334 、気にしてください:])

デバイスを再起動し、次に<コード> ps | grep "[d]ropbear" 、そして確かに十分に稼働しています。涼しさ!

 

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 起動時に実行され、rootがある場合は、好きなように編集できます。注意してください。)

編集:編集したスクリプトをブートイメージに撃つ必要があるかもしれません。ここでの方法に関する情報: 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

/etc/ ディレクトリを探します。通常、 99887766544338 パーティションに配置されています。

<事前> <コード> $ 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"

上記の手順は以下のように置き換えられます。

<事前> <コード> /etc/init.d/20userinit0

以降の再マウントRO:

<事前> <コード> /etc/init.d/20userinit1

あなたの目標を達成するために修正した実行可能または 99887766543312 ファイルを見つけるためのあなたのタスク:

 <コード> #!/system/bin/sh   dropbear -s -g  13  

Googleこのファイルがどのように使用されたかを知るための各候補について。

カスタムスクリプトを含めるための良い候補者は、次のものからの行です:

 <コード> /etc/init.d/20userinit4  

各デバイスとして固有の検索条件についての推測をする必要があるかもしれません...

例えば、Kornシェルで使用されている 998877655443315 を見つけました。このファイルを更新して 998877665443316 env var、そして今や私のパスにBusyBoxシンボルリンクを持っているたびに登録します。

ハードウェイ magic ファイルを見つけることができない場合): 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

私はこれらすべての方法を試してみました、そしてそれらのどれも私のために働いていませんでした。 ただし、ここでのRalf-Adolfの答えに基づいたもの CM12で起動時にスクリプトを実行する方法。 1?

基本的にはファイルを見つけます <コード> #!/system/bin/sh dropbear -s -g 18 で、最初に次の行を追加します。 <コード> #!/system/bin/sh dropbear -s -g 19

それから

 <コード> #!/system/bin/sh   dropbear -s -g  20  

完了! 998877665443321 で必要なものは何でも設定でき、起動時に実行されます。 ファイル 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 がシステムにいない場合、この回答はあなたのために機能しません。それを邪魔しないでください。

 

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

magisk がインストールされている場合は、.shを次のように配置できます。

/sbin/.magisk/img/.core/Service.d /

または

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

実行可能ファイルを作成することを忘れないでください。<コード> #!/system/bin/sh dropbear -s -g 23

詳細: https:// github。 COM / TOPJOHWU /マジーク/ BLOB /マスター/ 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

は、SELinuxが<コード> enforcing でなかったときに、Android 5の前に簡単でした。コードを任意のスクリプトに入力するか、Bootのroot権限で実行されたスクリプトとバイナリを置き換えることができます。もう1つの方法は、カスタム<コード> 9988776654431 サービスを特にバッチ実行スクリプトから一部のディレクトリから定義することでした。

これらのアプローチに基づくカスタムROM開発者は、異なる Pseudo- <コード> 99887766544332 現象、<コード>、<コード>、<コード>、<コード>、<コード> 99887766544355 、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>、<コード>

しかしながら、uid 9988776665443310 で実行されているプロセスは、限られたSELinuxコンテキストではかなり無力です。 <コード> 99887665543311 file 998877665443312 context context context context context <コード> 9988776665443313 からのシェルスクリプト から、SELINUXポリシーは、 UNRESTRICTIONCTICED コンテキストを挿入するためにパッチを適用する必要があります。 magisk <コード> 998877665443314 。その後、スクリプトを直接 998877666544315 サービスまたは 99887766665443316 のディレクトリから直接実行することが可能です。

詳細については起動時に実行可能ファイルを実行して実行しているのですか?

 

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

簡易道(作業):

  1. スクリプト内のPOSTブートコマンドを準備する、/ system / xbin / post-boot(set exec perm)

  2. 上記のカスタムスクリプトパスを追加します./System/eTc/Init.qcom.post_boot.shの末尾に追加されます./p>

  3. 例えば:

    エコー/システム/ XBIN / POST BOOT&GT;&gt; /system/etc/init.qcom.post_boot.sh

    完了!

    (QCOM POST_BOOT(QUORCOMMデバイス)が見つからない場合は、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)

 
 

関連する質問

0  充電時の電源ONは、バッテリーレベルが20%を超える場合にのみ  ( Power on when charging but only when battery level is greater than 20 ) 
> 私は最近タブレットを私の車にフィットさせようとしました、そして私はデバイスを目覚めさせることに問題がありました 電源ボタンを使わずに。 私の解決策は、充電しているときはいつでもデバイスを起動することですが、 電池残量が0%のとき、デバイスが起動してからす...

2  Android 2.2 - 起動時に実行されるアプリケーションを表示する方法[重複]  ( Android 2 2 how to see applications that run at start up ) 
この質問はすでにここで回答を持っています 閉じられた 10年前> 可能な重複: 起動時にアプリケーションを実行するのを防ぐにはどうすればよいですか? こんにちは! 起動時にどのアプリケーションが実行されるかを確認することができ...

1  できるだけ早くCPU周波数を設定する方法  ( How to set cpu frequency as early as possible ) 
この質問によって私が意味するのは、起動時にスクリプトの実行シーケンスです。 このスクリプト行を持っているとします。 <コード> echo 307000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_fr...

2  サムスンギャラクシーはブートループで起動して100%充電  ( Samsung galaxy s stuck in boot loop when 100 charged ) 
始める前に、私がファームウェアでめちゃくちゃになっていないことを言及する必要があります。しかし、私がそれを担当するたびにそれが100%の容量に達すると思うように思われます私はそれをオンにして、それはブートループで動かされます。私はそれが充電されていなかった間に...

1  PhoneはFastBootモードで起動し、OSまたはリカバリモードに起動できず、在庫のあるStock ROMは役に立ちません  ( Phone stuck in fastboot mode cant boot into os or recovery mode and flashing s ) 
数日前に携帯電話を再起動しようとしたときは、CSC FastBootモードに起動し、OSに起動できませんでした。私はvold down +電源を切ったのを試して、回復を起動しますが、それが機能しないが、Androidの携帯電話の画面を表示した後、もう一度電源を...

5  起動時にサービスを開始する[重複]]  ( Start services at boot ) 
この質問はすでにここで答えを持っています 起動後のアプリを開く/起動後のアプリを開く (1回) 閉じた 5年前...

3  ハニカムの長い起動時間  ( Long boot time in honeycomb ) 
私はただモトローラXOOMを持っていて、これまでのところそれを愛していますが、デバイスの最初の起動が非常に長い(約1分)と驚きます(約1分)。私は私のPCよりもRAMが少ない、「Hoggy」OS(ハニカムVS WIN 7)、およびソリッドステートハードドライブ...

4  失敗したROMフラッシュ後のAndroid復元ブートストラップNANDROIDバックアップ  ( Android restore bootstrap nandroid backup after a failed rom flash ) 
私はドロイドX2をCM7にフラッシュしようとしていましたが、失敗しました。フラッシュを試みた前に、「システムリカバリ」と呼ばれるアプリを使用してNANDROIDバックアップを実行しました(MotoDX2_BOOTSTRAP_SIGNED.APK)。 そのバッ...

36  ADBはデバイスを発見できますがFastBootは検出できません  ( Adb can discover devices but not fastboot ) 
この問題についてウェブを検索し、通常適切なドライバをインストールすることによって解決されます。問題は私はMac上にいます。 私のデバイスを接続するときは、 adb devices を実行するときに発見されます。 998876655443333333 を実行し...

4  G1 Androidブートロゴを過ぎて取得できません  ( G1 unable to get past android boot logo ) 
T-Mobile G1(HTC Dream)を持っています、今朝それは一度振動してから再起動してから、それからAndroidブートロゴに行き、黒い画面で停止しました。 電池を引っ張って再起動しようとしましたが、同じ問題があります。 電話機は根ざしていますが、...

1  バックグラウンドで起動時にアプリを実行する方法  ( How to run an app on startup in background ) 
バックグラウンドで起動時にアプリを実行する方法?たとえば、Glasswire、Kasperskyは起動中、通知バーのトレイの上に表示されます。 &ampを起動すると、GOMオーディオをバックグラウンドで実行したい。自動的にトレイを表示します。 ...

0  System / AppフォルダにAPKファイルが見つからないため、Androidは起動しません。  ( Android does not boot because of missing apk files in system app folder ) 
私は質問を動かしました https://stackoverflow.com/q/15872848/1665807 私は「/ system / app /」フォルダにAPKファイルがないかどうかを知りたいのか知りたいのです。 だから、私は/システム/ a...

4  私のAndroidデバイスは "Stealth"パーティションに起動していますか?  ( Is my android device booting into a stealth partition ) 
OK、これは私がAndroidシステムで遭遇している奇妙な問題です今数年間問題なく使用しています...そして私はそれをどのように修正するかについての実質的にアイデアから外れています。 問題を説明するために始めましょう、そして私が過去12時間の間試みてきたこと...

1  電源が接続されているときにタブレットは自動的に電源を入れますか?  ( How does a tablet automatically power on when a power source is connected ) 
Androidタブレットをお持ちの車の状況を想像してください: href="http://content.worldcarfans.co/2014/11/24/thumbnails/24486128385597.hl2.jpg" rel="nofollow...

0  a / bパーティションデバイスのstot_aにUSERDATA_Bをマウントする方法  ( How to mount userdata b in stot a in a b partition device ) 
Vendor_A、Vendor_B、UserData_A、USERDATA_Bを分離して、TWRPデュアルが起動したTissot(MI A1)を持っています。復活Remix(Slot_A)の公式とDOTOSの公式(SLOT_B)を備えたCosmicdanのT...




© 2021 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有


Licensed under cc by-sa 3.0 with attribution required.