Как запустить сценарий при загрузке?

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

44 голоса | спросил Naftuli Kay 3 MaramThu, 03 Mar 2011 00:15:20 +03002011-03-03T00:15:20+03:0012 2011, 00:15:20

5 ответов


37

Во время просмотра моей файловой системы Android я обнаружил, что она действительно имеет каталог /etc/init.d/. После заглядывания туда я нашел /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, заметьте:])

Перезагрузите устройство, затем запустите ps | grep "[d]ropbear", и, конечно же, он работает. Прохлада!

ответил Naftuli Kay 3 MaramThu, 03 Mar 2011 00:55:27 +03002011-03-03T00:55:27+03:0012 2011, 00:55:27
7

/data/init.sh запускается при загрузке, если у вас есть root, вы можете редактировать его по своему усмотрению. Будьте осторожны;)

Изменить: Очевидно, вам, возможно, потребуется также отредактировать отредактированный сценарий в загрузочном образе. Информация о том, как это сделать здесь: http://forum.xda-developers.com/showthread.php? т = 443994

ответил Matthew Read 3 MaramThu, 03 Mar 2011 00:19:03 +03002011-03-03T00:19:03+03:0012 2011, 00:19:03
3

Посмотрите на каталог /etc/. Обычно он помещается в раздел /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"

Некоторые из вышеперечисленных шагов могут заменяться на:

$ adb root
$ adb remount

, а затем повторно установите RO:

$ chmod o-w /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 service /init*.rc

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

Например, я нашел /etc/mkshrc, который используется оболочкой Korn. Я обновляю этот файл, чтобы расширить PATH env var и теперь каждый раз, когда я делаю adb shell У меня есть символические ссылки Busybox в моем PATH!

См. также жесткий путь (если вам не удастся найти файл magic ): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc

ответил gavenkoa 11 Maypm14 2014, 23:30:31
0

Простой способ (рабочий):

  1. Подготовьте свои команды загрузки почты в скрипте, скажем /system /xbin /post-boot (set exec perm)

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

Например:

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

Готово!

(Если вы не можете найти qcom post_boot (устройства Qualcomm), найдите скрипты post_boot)

ответил Seff 16 Jam1000000amTue, 16 Jan 2018 09:52:36 +030018 2018, 09:52:36
0

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

в основном, найдите файл /system/etc/install-recovery.sh и добавьте следующую строку в начале /data/init.sh &

затем

touch /data/init.sh
chmod 755 /data/init.sh

Готово! Теперь вы можете поместить все, что хотите, в /data/init.sh, и оно будет запущено при запуске. Если файл /system/etc/install-recovery.sh отсутствует в вашей системе, то этот ответ не будет работать для вас. Не беспокойтесь о его создании.

ответил Ramast 7 J0000006Europe/Moscow 2018, 21:17:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132