起動時にスクリプトを実行する方法 -- 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)

 
 

関連する質問

1  ファイルのコピー&名前を変更できるupdate.zipファイルを作成する方法  ( How to create an update zip file that can copy rename a file ) 
これは私が探しているものです - 私はファイルをコピーできる 'update.zip'ファイルが必要です(例): /system/framework/file-to-copy.apk 他のフォルダに: /システム/ 'system'フォルダ内の 'f...

2  電話をスクリプする方法は?  ( How do i script my phone ) 
私がほとんど何をしたいのか、設定をすばやく変更し、アラームなどを追加します。 おそらく他のものと呼ばれますか? これはWindows PCからです。 言語は重要ではありませんが、私はPythonとUnixのスクリプティングを知っています。 これは通常行われるの...

9  Androidでは、複数のコマンドラインコマンドを組み合わせるためのスクリプト(Win .batファイルと同様)を書くことができますか?  ( On android can i write scripts similar to win bat files to combine several co ) 
Windowsでは、.batファイルを使用して2つのコマンドを実行できます。 Android で同じことをどのように達成できますか 例えば: PCastClient / updateall を呼び出すことで、Podcastを更新します。 私の写真の...

1  Android 4.1.2と4.2.2を使用してADBを使用しているのは長押し方法?  ( How to long press in android 4 1 2 and 4 2 2 using adb ) 
以下のコマンドはAndroid 4.1.2と4.2.2で実行されていないが、Android 4.4 +。から実行されることを検出しました。 <事前> <コード> web2go0 キオスクモードで私の古いAndroid 4.1.2と4.2.2を使用しています。...

54  起動時にスクリプトを実行する方法  ( How can i run a script on boot ) 
Linuxで起動時にスクリプトを実行することに慣れていますが、Androidでこれを行う方法はわかりません。 SSHデーモンを起動時に起動したいので、いつも接続できるようになります。 Android Bootで任意のスクリプトを実行するにはどうすればよいです...

0  バイナリはどこに取り付けられていますか?  ( Where are binaries installed ) 
私はちょうど私の電話を根ざしたので、SL4Aをインストールすることができました。私はPythonスクリプトを介していくつかのコマンドを実行し、特にすべての通話でGoogleボイスをオフにして、電話をかけてから戻してください。私はバイナリが何でもアクセスする必要...

0  根ざしたAndroidデバイスでスクリプトを実行する方法  ( How to run a script on a rooted android device ) 
最近、カスタマイズされたWebページのみを表示するための内部的に多くのAndroidデバイスを展開しました。 機器:RKM MK902 OS:Android 4.4.2 rootuded WiFi RADIUS 8021X キオスクモードとタブリ...

3  vold.decrypt = trigger_shutdown_frameworkでinit.rc(Android 5.0)であなた自身の.shスクリプトを実行します。  ( Running your own sh script at vold decrypt trigger shutdown framework via init ) 
Android 5.0 Phone(中国語、MTK、適切なソースなし)のベンダーのバグを回避したい 問題は、バイナリのバグが原因で、で正しくリリースされていない <事前> <コード> # CUSTOM FORCEDATA SERVICE service fo...

3  起動時に実行可能ファイルを実行して実行し続ける方法は?  ( How to run an executable on boot and keep it running ) 
998877766666654330 プログラムから実行可能なビルドを持っています。根ざしたAndroidデバイスで実行したいです。 Androidが私の実行可能ファイルを殺す可能性はいくらですか? <コード> ./executable1 、次のコマンド...

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




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