題:
如何在啟動時運行腳本?
Naftuli Kay
2011-03-03 03:15:20 UTC
view on stackexchange narkive permalink

我習慣在Linux引導時運行腳本,但是我不確定如何在Android中執行此操作。我想在啟動時啟動SSH守護進程,因此我將始終能夠連接。如何在Android啟動時運行任意腳本?最好在Dalvik之外進行此操作。

七 答案:
Naftuli Kay
2011-03-03 03:55:28 UTC
view on stackexchange narkive permalink

環顧我的Android文件系統時,我發現它確實有一個 /etc/init.d / 目錄。在那兒偷看之後,我發現 /etc/init.d/20userinit 包含以下行:

  if [-e /data/local/userinit.sh ];然後登錄-p -i -t userinit“執行/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;  

當然,正是我所需要的,我在計算機上編寫了以下腳本,然後將其推送了到我的設備上:

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

(通過 scp userinit.sh推送到設備電話:/data/local/userinit.sh ,請注意:])

重新啟動設備,然後運行 ps | grep“ [d] ropbear” ,當然,它正在運行。太酷了!

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/100138/discussion-on-answer-by-naftuli-kay-how-can-i-run-a-script-on-開機)。
Matthew Read
2011-03-03 03:19:04 UTC
view on stackexchange narkive permalink

/data/init.sh 在引導時運行,如果您具有root用戶,則可以根據需要對其進行編輯。注意;)

編輯::顯然,您可能還需要將編輯後的腳本拖入啟動映像中。有關如何執行此操作的信息,請參見: http://forum.xda-developers.com/showthread.php?t=443994

是的,我似乎無法在運行CM7-RC1的Nexus One上找到此文件。我看一下`find / -name“ init.sh”`是否能顯示任何內容。在啟動時還有其他腳本運行嗎?
您應該有一個啟動外殼的`/ etc / init.rc`。它應該調用init.sh,但如果不這樣做,則可以使其調用自己的腳本。
不幸的是,我也沒有那個腳本,但是我確實找到了解決方案。
它是什麼版本的Android? 4.3確實有`/ data`但沒有`/ data / init / .sh`或`/ etc / init.rc`。 Grep在`/ etc`中找不到字符串`init`的任何有趣實例(甚至是遞歸的)。
您有什麼想法在構建AOSP時如何添加啟動腳本?
gavenkoa
2014-05-12 00:30:32 UTC
view on stackexchange narkive permalink

查看 / etc / 目錄。通常將其放在您可以作為RW掛載的 / system / 分區中:

  $ ls -l / etclrwxrwxrwx 1 root root 2009年1月11日/ etc -> / system / etc $ su $ mount -o remount,rw / system $ chmod o + w / system / etc#for“ adb push”  

上面的某些步驟可能被替換為:

  $ adb root $ adb重新安裝 

,然後重新安裝RO:

  $ chmod ow / system / etc $ mount -o remount,ro / system  

現在,您的任務是查找可執行文件或 * rc 文件,對其進行修改以實現目標:

  $ find / etc -type f -perm + 110 $ find / etc -name“ * rc” $ find / etc -name“ init *” $ grep -R / data / etc $ grep -R / system / etc  

有關每個候選者的Google信息,以了解如何使用此文件。

包括自定義腳本的最佳候選者為:

  $ grep服務/init*.rc 

由於每台設備的唯一性,您可能需要對搜索條件進行猜測...

例如,我發現 / etc / mkshrc ,由Korn shell使用。我更新此文件以擴展 PATH env var,現在每次執行 adb shell 時,我的PATH中都有Busybox符號鏈接!

另請參見困難的方式(如果您無法找到魔術文件): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init -rc

但是,不是每次啟動都覆蓋它嗎?我認為/ etc文件夾是ramio cpio的一部分。
@ransh至少在以下情況中不是這種情況:8.1.0_r60其中,“ / system”是“ system.img”,而“ / etc”是到“ / system”的符號鏈接。
Ramast
2018-06-07 23:17:25 UTC
view on stackexchange narkive permalink

我嘗試了所有這些方法,但對我來說都不起作用。但是,什麼起作用是基於lord-ralf-adolf在這裡的回答如何在CM12.1的引導程序中運行腳本?

基本上,找到文件 /system/etc/install-recovery.sh ,然後在開始的 /data/init.sh &

然後

  touch /data/init.shchmod 755 /data/init.sh 

完成!您現在可以放任何東西想要在 /data/init.sh 中運行,它將在啟動時運行。如果文件 /system/etc/install-recovery.sh 不在您的系統中,則此答案不會為你工作。不要為創建它而煩惱。

實際上,我有一個不存在`/ system / etc / install-recovery.sh`的系統,但是如果存在,它仍會在引導時執行,因此值得檢查。
這是唯一適用於Android 9的功能。
H. Hess
2019-10-03 13:51:33 UTC
view on stackexchange narkive permalink

如果已安裝 magisk ,則可以將.sh放在:

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

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

不要忘記使其可執行: chmod + x your-script.sh

更多信息: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts

Irfan Latif
2019-10-03 21:59:09 UTC
view on stackexchange narkive permalink

在Android 5之前的版本中,當SELinux並非 enforced 時,情況很簡單。您可以將代碼放在任何腳本中,也可以將二進製文件替換為在啟動時以root特權執行的腳本。另一種方法是定義定制的 init 服務,以專門從某個目錄中批量執行腳本。

基於這些方法,定制ROM開發人員引入了不同的 pseudo- init .d 現象,例如 /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 / 等。

但是,使用UID 0 運行但在受限制的SELinux上下文中的進程很無奈。在 init.rc 文件中使用 u:r:init:s0 上下文啟動的服務甚至無法從執行shell腳本 / system / bin / ,因此需要修補SELinux策略以注入 unrestricted 上下文,例如Magisk 定義 u:r:magisk:s0 。之後,可以直接作為 init 服務或從類似 init.d 的目錄中運行腳本。

有關詳細信息,請參見如何在啟動時運行可執行文件並使其保持運行狀態?

Seff
2018-01-16 12:52:37 UTC
view on stackexchange narkive permalink

簡單的方法(工作):

  1. 在腳本中準備開機自檢命令,例如/ system / xbin / post-boot(設置exec perm)

  2. 在/system/etc/init.qcom.post_boot.sh

  3. ol>

    例如:

    echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh

    完成!

    (如果無法找到qcom post_boot(高通設備),查找所有post_boot腳本)



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...