J'ai un script que je dois exécuter une fois, et seulement une fois que le téléphone est démarré.
J'ai essayé init.qcom.post_boot.sh, init.sec.boot.sh, debuggerd, et enfin mkshrc.
Alors que mon script fonctionnait avec debuggerd, j'ai constaté qu'il s'exécutait à chaque fois que debuggerd fonctionnait, ce qui n'est pas quelque chose dont j'ai besoin... c'est ainsi que je suis tombé sur /system/etc/mkshrc
(les 2 autres n'ont tout simplement pas fonctionné)
Ce que j'ai trouvé, c'est que le script s'exécute une seule fois, au démarrage... cependant, il semble également s'exécuter à chaque fois adb shell
s'exécute, ainsi que (je suppose) à chaque fois que le shell est lancé... ce qui est également sous-exploitable.
Alors, que puis-je faire en /system/etc/mkshrc
pour m'assurer que l'appel à mon script ne s'exécute qu'une seule fois... au démarrage ?
J'ai envisagé de lancer un while
pour vérifier la présence du getprop sys.boot_completed
s'il ==
1 puis dépose un fichier quelque part, et par le biais d'un if
à l'intérieur du loop pour vérifier la présence de ce fichier, s'il existe, quitter, sinon exécuter la commande suivante... cependant, partout où je suis autorisé à vider ce fichier, il persiste entre les démarrages, de sorte que la commande next command
ne fonctionne plus jamais.
NOTE Il n'est pas nécessaire d'être rooté pour faire cela, et mon script n'a pas besoin d'être rooté pour s'exécuter (oui, je l'ai confirmé).
CODE
BB=/system/xbin/busybox
MYPID=/mnt/sdcard/.kev-run
while [ `getprop init.svc.bootanim` == "stopped" ] ; do
# if the run file does not exist, and we are stopped
if [ ! -e $MYPID ]; then
# run the scripts, then create the run file
LOG=/mnt/sdcard/Download/kevs-scripts.log
$BB rm -f $LOG;
$BB echo "Launching Kevs Scripts" >> $LOG;
MY_SCRIPT
# write the run file so we aren't running this everytime this file runs
touch $MYPID;
sleep 1;
fi
done
# if we are still booting, delete the run file
while [ `getprop init.svc.bootanim` != "stopped" ] ; do
# we're not done booting, remove our makeshift pid file and sleep a second
$BB rm -f $MYPID;
sleep 1;
done
Il me semble que ce n'est pas le cas