1 votes

Comment vérifier si le script est exécuté une fois que l'appareil est démarré ?

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

1voto

Stu Points 169

mkshrc est par définition exécuté à chaque fois qu'un interactif est lancé, ce n'est donc pas le bon endroit.

Vous devriez plutôt connecter votre script au système init d'Android. (Désolé, je ne peux pas donner de détails sur la façon de le faire ; je ne connais pas bien l'écosystème Android, je suis juste mksh ).

Écrire dans un fichier en tmpfs (pour qu'il soit automatiquement supprimé lors de la mise hors tension) est généralement une bonne approche pour un script qui ne s'exécute qu'une seule fois. Cependant, je serais surpris que le système init d'Android ne fournisse pas une telle facilité ; c'est l'outil idéal pour votre travail.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X