La versión corta:
¿Por qué mi script bash (que se ejecuta en segundo plano, iniciado a través de SSHD) no se ejecuta cada ~30 segundos cuando debería hacerlo? (NOTA: SSHD y el script se ejecutan como root !)
Tengo un script que empiezo a utilizar nohup bash script.sh &
para que se ejecute en segundo plano.
El script debe comprobar si una aplicación específica está conectada utilizando netstat
y si no, se reconecta automáticamente utilizando am start
y input keyevent
. (Aunque esto resulta ser irrelevante).
Me he dado cuenta de que aunque el script debería comprobar cada 30 segundos (aproximadamente, por supuesto), a veces tarda minutos en comprobarlo. Realmente no pude averiguar por qué y parecía completamente al azar (tenga en cuenta que la pantalla del teléfono está apagado la mayor parte del tiempo y todo se ejecuta en el fondo.), así que hice un testcript que es lo que la pregunta debe centrarse en la simplicidad:
#!/bin/sh
while : ; do
echo "$(date +'%Y-%m-%d %H:%M:%S')"
sleep 30
done
Eso es. Comenzó a través de nohup bash script.sh &
usando SSHD. El script no hace nada más que imprimir la fecha actual y gracias a nohup la escribe en un archivo. Dejé esto funcionando por un tiempo y luego escribí otro script para comprobar los resultados e imprimir la cantidad de segundos siempre que esté por encima de 30. Resultado:
134
127
115
127
88
113
116
99
110
116
54
44
70
75
62
82
94
68
429
62
81
126
144
39
467
71
62
Esto es de la salida de un script que se ejecutó durante sólo 4:20 horas, por lo que un buen número de veces donde la ejecución debe haber sido retrasado, el sueño era más de 30 segundos, o lo que está pasando....
¿Puede alguien explicar esto? ¿Y hay alguna solución para esto?
Sospecho que esto puede tener algo que ver con la memoria o la gestión de energía que pausa el script, pero realmente no debería suceder y me gustaría que mi script se ejecutara en segundo plano y durmiera exactamente 30 segundos y no se pausara o retrasara. En este testrun, el más alto fue 467 segundos, pero el más alto que he visto con el script principal hasta ahora fue un poco más de 20 minutos . Esto es raro, pero 5-10 minutos de retraso ocurre algunas veces al día.