Как я могу запустить скрипт на ботинке? -- boot поле с участием shell поле с участием scripts пол android Связанный проблема

How can I run a script on boot?


54
vote

проблема

русский

Я привык к запуску сценариев на загрузке в Linux, но я не уверен, как это сделать в Android. Я хотел бы начать свой демон SSH на старте, поэтому я всегда буду подключаться. Как я могу запустить произвольный сценарий на ботинке Android? Было бы предпочтительно сделать это за пределами Дальвика.

Английский оригинал

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 я обнаружил, что на самом деле есть <код> /etc/init.d/ Directory. После того, как заглянул там, я нашел <код> /etc/init.d/20userinit со следующими строками:

 <код> 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;   

Это существо, конечно, именно что мне нужно, я написал следующий скрипт на моем компьютере, а затем нажал его на мое устройство:

 <код> #!/system/bin/sh   dropbear -s -g    

(нажата на устройство через <код> scp userinit.sh phone:/data/local/userinit.sh , разум:])

Перезагрузил устройство, затем RAN <код> 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/ Directory. Обычно он помещен в <Код> /system/ Раздел, который вы можете установить как 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"   

Некоторые выше шаги могут быть замены:

 <код> /etc/init.d/20userinit0  

а позже molount Ro:

 <код> /etc/init.d/20userinit1  

Теперь ваша задача найти исполняемый файл или <код> /etc/init.d/20userinit2 файла, который вы измените для достижения своей цели:

 <код> /etc/init.d/20userinit3  

Google о каждом кандидате, чтобы узнать, как использовался этот файл.

Хороший кандидат для включая пользовательские скрипты - это линии:

 <код> /etc/init.d/20userinit4  

Как каждое устройство уникально вам может понадобиться догадаться о критериях поиска ...

Например, я нашел <код> /etc/init.d/20userinit5 , который используется Korn Shell. Обновляю этот файл, чтобы продлить <код> /etc/init.d/20userinit6 env var и теперь каждый раз, когда я делаю <код> /etc/init.d/20userinit7 у меня есть synybox symlinks на моем пути!

См. Также HARD WIND (если вам не повезет с нахождением файла 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

Я пробовал все эти методы, и ни один из них не работал на меня. То, что сработало, однако, было основано на ответе лорда-Ральфа-Адольфа здесь Как запустить скрипт на загрузке в CM12. 1?

в основном, найди файл <Код> /etc/init.d/20userinit8 и добавьте следующую строку в начале <Код> /etc/init.d/20userinit9

Тогда

 <код> 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  

сделано! Теперь вы можете поставить все, что вы хотите в 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 , и он будет работать при запуске. Если файл <код> 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 to:

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

или на

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

Не забудьте сделать его исполняемым: <код> 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 .

Подробнее: https: // github. COM / TOPJOHNWU / MAGISK / BLOB / MASTER / 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

Вещи были простыми до Android 5, когда Selinux не был <Код> enforcing . Вы можете поместить свой код в любой сценарий или заменить двоичный скрипт, который был выполнен с привилегиями root при загрузке. Другой метод должен был определить пользовательский <код> init SERVICE, специально для пакетных сценариев выполнения из некоторого каталога.

На основании этих подходов пользовательские разработчики ROM представили различные псевдо- <код> 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/ etc.

Однако процесс работает с UID init0 , но в ограниченном контексте SELinux довольно беспомощно. Сервис начал <код> init1 файла с <код> init2 контекст не может даже выполнить Сценарий оболочки из <Код> init3 , поэтому политика SELinux должна быть исправлена, чтобы ввести в Injection Context, например, Magisk определяет <код> init4 . После этого можно запустить скрипт напрямую как <Код> init5 Сервис или из <код> init6 - подобный каталог.

Для деталей см. Как запустить исполняемый файл на загрузке и продолжать работать?

 

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. Подготовьте свои заповединые команды загрузки в сценарии, скажем, System / Xbin / Post-boot (Set Exec Perm)

  2. Добавьте вышеупомянутый путь пользовательского скрипта в конце /system/etc/init.qcom.post_boot.sh

Например:

echo / system / xbin / post-boot & gt; & gt; /system/etc/init.qcom.post_boot.sh

сделано!

(Если вы не можете найти qcom post_boot (устройства Qualcomm), ищите любые сценарии 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  Как запустить 2 сценария оболочки из Ramdisk?  ( How to run 2 shell scripts from ramdisk ) 
Я пытаюсь настроить мой Рамдиск, чтобы устрелить 2 комплекта сценариев. 1 - только Ramdisk / SBIN, остальные являются пользовательскими скриптами <код> # Ch...

-1  Выполнение скрипта  ( Executing a script ) 
Я новичок в Android и пытаюсь найти самый простой способ запустить 2 строки сценария, который удаляет файлы из определенного каталога. Я поглотил тему и соз...

0  Как создать Android Sepolicy на основе отказа "execute_no_trans"?  ( How to create android sepolicy based on the denial execute no trans ) 
Я пытаюсь выполнить свой скрипт <код> /vendor/bin/init.inmod.sh с использованием метода ниже: Сценарий <код> init.inmod.sh : <код> #!/shebang??? /vendor...

2  Пакетный скрипт Используйте SQLite3 для редактирования настроек  ( Batch script use sqlite3 to edit settings db ) 
Я хочу создать пакетный скрипт, чтобы включить скрытые языки в телефоне Huawei. Но каждый раз, когда я застрял, можете ли вы, ребята, вы найдете место, где мо...

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 +. <код> input touchscreen swipe x1 y1 x2 ...

2  Как я могу сценарию свой телефон?  ( How do i script my phone ) 
Что я в основном хочу сделать, быстро изменяет настройки, добавляют аварийные сигналы и т. Д. Это, возможно, называется что-то еще? Это с ПК Windows. Язык...

3  Запуск вашего собственного сценария .sh на vold.decrypt = trger_shutdown_framework через init.rc (Android 5.0)  ( Running your own sh script at vold decrypt trigger shutdown framework via init ) 
Я хочу обработать ошибку поставщика в телефоне Android 5.0 (китайский, MTK, нет правильного источника) Проблема связана с ошибкой в ​​некоторых двоичных дан...

2  Как я могу успешно запустить этот сценарий на эмулируемом терминале на Android?  ( How can i successfully run this script on a emulated terminal on android ) 
фон Я пытаюсь установить Ubuntu на мой Acer Iconia A500, используя VNC, и это приложение называется COMPLEL INTERUX . Мой планшет укоренился, и я нашел нес...

0  Как запустить скрипт на укоретенном устройстве Android?  ( How to run a script on a rooted android device ) 
Мы недавно развернули много устройств Android внутри для отображения только настроек веб-страницы. . Устройство: RKM MK902 ОС: Android 4.4.2 Укоренился ...

0  Звуковая сигнализация от эмулятора терминала  ( Sound alarm from terminal emulator ) 
Для моих целей я хочу создать простой сценарий Bash, который уведомит меня, когда встретятся соответствующие условия. Есть ли способ сделать звуковое оповещен...

2  Tasker для запуска скриптов в оконечной оболочке  ( Tasker to run scripts in terminal shell ) 
Я искал это, но до сих пор я не нашел никого, который сможет сделать это, поэтому я решил спросить здесь. До сих пор я использовал Trigger Pro в качестве мо...

0  Android эмулятор - install_failed_no_matching_abis: не удалось извлечь нативные библиотеки, RES = -113  ( Android emulator install failed no matching abis failed to extract native lib ) 
Когда я пытаюсь установить <код> apk файла через <код> monkeyrunner script python, получение ошибки <код> INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract...

1  Как создать файл update.zip, который может скопировать и переименовать файл?  ( How to create an update zip file that can copy rename a file ) 
Вот именно то, что я ищу - мне нужно файл «Update.zip», который может скопировать файл (пример): /system/framework/file-to-copy.apk в другую папку: / Си...

3  Как запустить исполняемый файл на загрузке и продолжать работать?  ( How to run an executable on boot and keep it running ) 
У меня есть исполняемая сборка из ndk-build программы. Я хочу запустить его на укоретенном устройстве Android. Сколько стоит вероятность того, что Android у...

54  Как я могу запустить скрипт на ботинке?  ( How can i run a script on boot ) 
Я привык к запуску сценариев на загрузке в Linux, но я не уверен, как это сделать в Android. Я хотел бы начать свой демон SSH на старте, поэтому я всегда буду...

2  Как я могу запустить скрипт оболочки, когда в Wi-Fi подключен?  ( How can i run a shell script when some wifi is connected ) 
У меня действительно простой скрипт оболочки, который просто добавляет маршрут к моей машине внутренней разработки. Это полезно, так как у этой машины есть не...

0  Автоматически запускает браузер Dolphin на загрузке  ( Automatically runs dolphin browser on boot up ) 
Я новичок здесь. У меня есть некоторые палочки для Android. Я использую их, чтобы запустить киоск. Это какая-то газета на большом экране. Я бежит в браузе...

0  Где установлены двоичные файлы?  ( Where are binaries installed ) 
Я только что недавно уконул свой телефон, чтобы я мог установить SL4A. Я хочу выполнить некоторые команды через скрипт Python, в частности, выключите Google V...

0  Как автоматизировать настройку пост-установки  ( How to automate post install setup ) 
Я недавно заметил, что я провожу довольно много времени, настраивая различные настройки после установки Clean ROM. Мне было интересно, как я могу автоматизиро...

1  Как установить частоту CPU как можно раньше?  ( How to set cpu frequency as early as possible ) 
Что я имею в виду под этим вопросом, заключается в последовательности выполнения скриптов во время загрузки. Предположим, у меня есть эта строка скрипта: ...

6  Нет ли способа получить скрипты для бега в Android?  ( Is there no way to get scripts to run in android ) 
Поскольку Android - это Linux на его основе, я логически думаю, что должно быть возможно запустить скрипт на Android, как сценарий Python или PHP-скрипт (с по...

14  Запустите приложение для Android через скрипт оболочки?  ( Start an android application via a shell script ) 
Можно ли запустить фактическое приложение Android из командной строки в Android? Например, скажем, я просто хотел бы начать / приносить на фронт мой календарь...

2  Поделиться текстом через HTTP-запрос  ( Share text via http request ) 
Я хотел бы добавить элемент в меню «Share», который отправляет ссылки и другой маленький текст через запросы HTTP POST. На моем компьютере я использую Curl ...

9  На Android я могу написать скрипты (похоже на Win .BAT файлы), чтобы объединить несколько командных командных команд?  ( On android can i write scripts similar to win bat files to combine several co ) 
В Windows я могу запустить две команды с помощью файла .bat. Как я могу достичь то же самое на Android Например: Обновите мои подкасты, вызывая PCASCOCL...

0  CWM Recovery Nandroid Backup  ( Cwm recovery nandroid backup ) 
Есть ли способ создать резервную копию Nandroid внутри CWM Recovery , с помощью /cache/recovery/extendedcommand файл? (этот файл поддерживает все команд...

Связанный проблема

1  Как запустить 2 сценария оболочки из Ramdisk? 
-1  Выполнение скрипта 
0  Как создать Android Sepolicy на основе отказа "execute_no_trans"? 
2  Пакетный скрипт Используйте SQLite3 для редактирования настроек 
1  Как долго-пресса в Android 4.1.2 и 4.2.2 Использование ADB? 
2  Как я могу сценарию свой телефон? 
3  Запуск вашего собственного сценария .sh на vold.decrypt = trger_shutdown_framework через init.rc (Android 5.0) 
2  Как я могу успешно запустить этот сценарий на эмулируемом терминале на Android? 
0  Как запустить скрипт на укоретенном устройстве Android? 
0  Звуковая сигнализация от эмулятора терминала 
2  Tasker для запуска скриптов в оконечной оболочке 
0  Android эмулятор - install_failed_no_matching_abis: не удалось извлечь нативные библиотеки, RES = -113 
1  Как создать файл update.zip, который может скопировать и переименовать файл? 
3  Как запустить исполняемый файл на загрузке и продолжать работать? 
54  Как я могу запустить скрипт на ботинке? 
2  Как я могу запустить скрипт оболочки, когда в Wi-Fi подключен? 
0  Автоматически запускает браузер Dolphin на загрузке 
0  Где установлены двоичные файлы? 
0  Как автоматизировать настройку пост-установки 
1  Как установить частоту CPU как можно раньше? 
6  Нет ли способа получить скрипты для бега в Android? 
14  Запустите приложение для Android через скрипт оболочки? 
2  Поделиться текстом через HTTP-запрос 
9  На Android я могу написать скрипты (похоже на Win .BAT файлы), чтобы объединить несколько командных командных команд? 
0  CWM Recovery Nandroid Backup