>> [Contenido] Recolección remota de datos paso a paso
Modelo Raspberry Pi: Zero W
Sistema Raspberry Pi: Raspbian, 2018-11-13-raspbian-stretch-lite.img
Python 2.7.3
Todos los programas previamente depurados se ejecutan manualmente. Ahora deje que comience automáticamente.
Se han encontrado tres métodos en línea:
Agregar código de inicio en rc.local | Intenté varias veces según N versiones del artículo sin éxito |
Comience como un servicio | Prueba OK |
Iniciar desde el escritorio | sistema raspbian-stretch-lite sin escritorio |
Como inicio de servicio, significa que se inicia un servicio al inicio. En este programa de servicio, se llama a python para ejecutar el archivo de programa, de modo que el archivo de programa pueda ejecutarse automáticamente al inicio.
Primero mire algunos de los servicios existentes en el sistema, ingrese el directorio /etc/init.d y enumere todos los contenidos:
pi @ raspberrypi: ~ $ cd /etc/init.d
pi @ raspberrypi: /etc/init.d $ ls
Puede abrir algunos para ver qué hay dentro:
pi @ raspberrypi: /etc/init.d $ sudo nano ssh
pi @ raspberrypi: /etc/init.d $ sudo nano ntp
El script serial de prueba del servicio recién creado en el directorio /etc/init.d debe tener un nombre especial para evitar conflictos con el sistema.
pi @ raspberrypi: ~ $ sudo nano /etc/init.d/test-serial
En el editor nano que aparece, copie el siguiente párrafo, guárdelo y salga:
1 #! / Bin / bash 2 # /etc/init.d/test-serial 3 4 ### BEGIN INIT INFO 5 # Proporciona: xxxx_test_serial 6 # Required-Start: $ remote_fs 7 # Required-Stop: $ remote_fs 8 # Inicio predeterminado: 2 3 4 5 9 # Parada predeterminada: 0 1 6 10 # Descripción breve: funciones serie de prueba 11 # Descripción: Este servicio se utiliza para iniciar el servicio serie de prueba 12 ### END INIT INFO 13 14 case " $ 1 " en 15 inicio ) 16 echo " Inicio " 17 python /home/pi/test_serial.py & 18 ;; 19 stop) 20 echo " Stop " 21 killall test_serial.py 22 salida 1 23 ;; 24 *) 25 echo " Uso: prueba de servicio-inicio en serie | parada " 26 salida 1 27 ;; 28 esac 29 salida 0
Las primeras líneas de comentarios también son útiles: al escribir un nuevo servicio, complete el nombre y la función reales.
inicio) El siguiente python /home/pi/test_serial.py y significa ejecutar el archivo /home/pi/test_serial.py con python, y el siguiente y significa que el programa se puede ejecutar en segundo plano, lo que no afectará la operación de otros servicios .
Cambie al directorio /etc/init.d y enumere todos los archivos en este directorio
pi @ raspberrypi: ~ $ cd /etc/init.d
pi @ raspberrypi: /etc/init.d $ ls
Puede ver que otros archivos de servicio son verdes y test-serial es gris
En el sistema Linux, diferentes colores representan diferentes tipos de archivos:
Azul | Directorio |
Verde | Archivo ejecutable |
Rojo | Archivo comprimido |
Azul claro | Archivo de enlace |
Rojo intermitente | El archivo de enlace es anormal |
Amarillo | Archivo de dispositivo |
Gris | Otros documentos |
Agregue permiso de ejecución al archivo de serie de prueba para que pueda ejecutarse y llamarse:
pi @ raspberrypi: ~ $ sudo chmod + x /etc/init.d/test-serial
Luego agregue test-serial al elemento de inicio del sistema:
pi @ raspberrypi: ~ $ sudo update-rc.d test-serial por defecto
启动 test-serial
pi @ raspberrypi: ~ $ sudo service test-serial start
Ver el estado de ejecución
pi @ raspberrypi: ~ $ service test-serial status
Reinicie Raspberry Pi para ver si el servicio se inicia automáticamente
pi @ raspberrypi: ~ $ sudo shutdown -h ahora
pi @ raspberrypi: ~ $ estado de serie de prueba de servicio
En el proyecto de recopilación remota de datos, se utilizan los siguientes dos programas, y los métodos anteriores se utilizan para iniciar y ejecutar los dos servicios por separado:
xx_monitor.py | Comunicación, almacenamiento |
xx_upload.py | Subir archivos de datos |
Eliminar permisos de ejecución de archivos
pi @ raspberrypi: ~ $ sudo chmod -x /etc/init.d/test-serial
Eliminar elementos de inicio del sistema
pi @ raspberrypi: ~ $ sudo update-rc.d -f test-serial remove
Si modifica la secuencia de comandos del servicio, cuando vuelva a usar las instrucciones en el servicio, se le pedirá que vuelva a cargar. Siga las instrucciones para ingresar:
pi @ raspberrypi: ~ $ systemctl daemon-reload
En este momento, indica que se requiere permiso de root, pero las cosas relacionadas con la raíz no se han configurado antes.
Establezca la contraseña de la cuenta raíz:
pi @ raspberrypi: ~ $ sudo passwd root
Abrir cuenta de root:
pi @ raspberrypi: ~ $ sudo passwd - desbloquear raíz
Luego ejecute systemctl daemon-reload, lo que provocará el éxito
pi @ raspberrypi: ~ $ systemctl-daemon-reload