Tengo un script que necesito ejecutar una vez, y solo una vez que el teléfono se haya iniciado.
He intentado en init.qcom.post_boot.sh, init.sec.boot.sh, debuggerd y finalmente mkshrc
Mientras mi script se ejecutó con debuggerd, descubrí que se ejecutaba cada vez que debuggerd se ejecutaba, lo cual no es algo que necesito que suceda... por lo tanto, cuando me topé con /system/etc/mkshrc
(los otros 2 simplemente no funcionaron)
Lo que encontré fue que el script se ejecuta esa única vez, al iniciar... sin embargo, también parece ejecutarse cada vez que se ejecuta adb shell
, junto con (asumo) cada vez que se inicia el shell... lo cual tampoco es deseable.
Entonces, ¿qué puedo hacer en /system/etc/mkshrc
para asegurarme de que mi llamada a mi script se ejecute solo una vez... al iniciar?
Pensé en ejecutar un bucle while
para verificar la getprop sys.boot_completed
si es ==
1 entonces guardar un archivo en algún lugar, y mediante una afirmación if
dentro del bucle para verificar ese archivo, si existe entonces salir, si no, ejecutar el siguiente comando... sin embargo, en todos los lugares donde puedo guardar ese archivo, persiste entre arranques, por lo que el siguiente comando
nunca se ejecuta de nuevo.
NOTA No es necesario ser root para hacer esto, ni mi script necesita ser root para ejecutarse (sí, lo he confirmado)
CODIGO
BB=/system/xbin/busybox
MYPID=/mnt/sdcard/.kev-run
while [ `getprop init.svc.bootanim` == "stopped" ] ; do
# si el archivo de ejecución no existe, y estamos detenidos
if [ ! -e $MYPID ]; then
# ejecutar los scripts, luego crear el archivo de ejecución
LOG=/mnt/sdcard/Download/kevs-scripts.log
$BB rm -f $LOG;
$BB echo "Lanzando Scripts de Kev" >> $LOG;
MI_SCRIPT
# escribir el archivo de ejecución para que no estemos ejecutando esto cada vez que se ejecuta este archivo
touch $MYPID;
sleep 1;
fi
done
# si todavía se está iniciando, eliminar el archivo de ejecución
while [ `getprop init.svc.bootanim` != "stopped" ] ; do
# no hemos terminado de iniciar, eliminar nuestro archivo de identificación provisional y dormir un segundo
$BB rm -f $MYPID;
sleep 1;
done
Me parece que algo está mal