2014-12-15 02:59:25 +0000 2014-12-15 02:59:25 +0000
17
17

¿Cómo saber qué servicios se ejecutan al inicio en Raspberry Pi? (raspbian)

Tengo algunos servicios que se ejecutan en el arranque, pero en realidad he olvidado cómo los configuré. Si quiero cambiar su actividad, ¿cómo podría hacerlo? Por ejemplo, tal vez quiero deshabilitar un servicio para que no se inicie en el arranque o tal vez quiero iniciarlo usando un método diferente.

Específicamente, tengo un servicio de openvpn que se ejecuta con éxito en el arranque, pero algunos tutoriales dicen que debo atar el servicio de los programas de intercambio de archivos a la propia vpn, de modo que si la vpn se cae, también lo hace el servicio de intercambio de archivos. Pero creo que quizás la autoejecución de mi vpn está complicando las cosas y debería desactivarla o modificar la forma en que se lanza. Pero, ¿cómo comprobarlo?

Respuestas (3)

23
23
23
2014-12-16 14:49:09 +0000

Estoy asumiendo que tienes una Raspberry que utiliza raspian, que, hasta donde yo sé, aún no ha pasado a systemd. En este caso, la respuesta es la siguiente.

EDIT: para systemd (Jessie o posterior), ver al final.

En primer lugar, puede determinar qué sistema está actualmente en ejecución mediante el comando

sudo service --status-all

Obtendrá una lista más o menos así

[+] triggerhappy
  [+] udev
  [?] udev-mtab
  [?] umountfs
  [?] umountnfs.sh
  [?] umountroot
  [-] urandom
  [+] vsftpd
  [+] weewx
  [-] x11-common

Los +‘s indican servicios en ejecución, los -’s servicios no en ejecución, los ?’s servicios que no permiten status como comando posible: son en su mayoría comandos que no necesitan ejecutarse todo el tiempo, sólo ocasionalmente.

Volviendo a tu pregunta, necesitas entender los niveles de ejecucións en Linux. Los niveles de ejecución (0-6 + S) identifican qué servicios pueden/deben ejecutarse. Una secuencia de arranque progresa desde un nivel de ejecución inicial (especificado en /etc/inittab, en mi Raspberry

# The default runlevel.
 id:2:initdefault:

esta línea lo identifica como 2, y luego progresa hasta el nivel de ejecución final estándar de su distro (de 2 a 5). Identificas tu runlevel actual mediante el comando

# runlevel
 N 2

(en mi caso, un servidor headless). Los otros niveles de ejecución son (de nuevo desde é/etc/inittab*):

# Runlevel 0 is halt.
 # Runlevel 1 is single-user.
 # Runlevels 2-5 are multi-user.
 # Runlevel 6 is reboot.

El usuario único (1) a menudo se identifica también como S.

En un arranque normal, por lo tanto, usted comienza en 2, y progresa hasta 5. Para encontrar los servicios iniciados en esta progresión, emita el comando

# grep -nrI Default-Start /etc/init.d
 umountroot:7:# Default-Start:
 checkroot.sh:8:# Default-Start: S
 kbd:6:# Default-Start: S
 isc-dhcp-server:11:# Default-Start: 2 3 4 5
 mountkernfs.sh:7:# Default-Start: S
 hostname.sh:7:# Default-Start: S
 mountnfs.sh:7:# Default-Start: S
 halt:6:# Default-Start:
 dphys-swapfile:20:# Default-Start: 2 3 4 5
 bootlogs:7:# Default-Start: 1 2 3 4 5
 rc.local:6:# Default-Start: 2 3 4 5
 hostapd:9:# Default-Start: 2 3 4 5
 keyboard-setup:8:# Default-Start: S
 lightdm:7:# Default-Start: 2 3 4 5
 procps:11:# Default-Start: S
 mysql:9:# Default-Start: 2 3 4 5
 single:6:# Default-Start: 1
 vsftpd:7:# Default-Start: 2 3 4 5
 samba:7:# Default-Start: 2 3 4 5
 mountall.sh:6:# Default-Start: S
 weewx:20:# Default-Start: 2 3 4 5
 umountnfs.sh:7:# Default-Start:
 triggerhappy:6:# Default-Start: 2 3 4 5
 ifplugd:24:# Default-Start: 2 3 4 5
 alsa-utils:9:# Default-Start: S
 bootmisc.sh:7:# Default-Start: S
 sendsigs:6:# Default-Start:
 console-setup:7:# Default-Start: S
 nfs-common:7:# Default-Start: 2 3 4 5 S
 checkroot-bootclean.sh:6:# Default-Start: S
 rsyslog:7:# Default-Start: 2 3 4 5
 x11-common:7:# Default-Start: S
 mountdevsubfs.sh:7:# Default-Start: S
 cron:10:# Default-Start: 2 3 4 5
 mountnfs-bootclean.sh:6:# Default-Start: S
 mountall-bootclean.sh:6:# Default-Start: S
 screen-cleanup:11:# Default-Start: S
 udev:6:# Default-Start: S
 ssh:7:# Default-Start: 2 3 4 5
 haveged:8:# Default-Start: 2 3 4 5
 hwclock.sh:26:# Default-Start: S
 plymouth:9:# Default-Start: 2 3 4 5
 motd:7:# Default-Start: 1 2 3 4 5
 killprocs:6:# Default-Start: 1
 networking:6:# Default-Start: S
 fake-hwclock:9:# Default-Start: S
 udev-mtab:6:# Default-Start: S
 apache2:6:# Default-Start: 2 3 4 5
 reboot:6:# Default-Start:
 umountfs:6:# Default-Start:
 plymouth-log:9:# Default-Start: S
 openvpn:11:# Default-Start: 2 3 4 5
 kmod:8:# Default-Start: S
 ntp:7:# Default-Start: 2 3 4 5
 rpcbind:9:# Default-Start: S 2 3 4 5
 urandom:6:# Default-Start: S
 rmnologin:6:# Default-Start: 2 3 4 5
 checkfs.sh:7:# Default-Start: S
 sudo:8:# Default-Start: 2 3 4 5
 mtab.sh:6:# Default-Start: S
 dbus:6:# Default-Start: 2 3 4 5
 rsync:8:# Default-Start: 2 3 4 5

Esto imprime la línea que comienza con Default-Start en todos los archivos de /etc/init.d/, que es donde se guardan los archivos que identifican los distintos servicios. La línea en cuestión identifica el nivel de ejecución en el que debe iniciarse cada servicio. Si un servicio se inicia en el nivel de ejecución N, cuando el sistema avanza a N+1 no es necesario volver a iniciarlo, pero si se encuentra sin ejecutar se inicia.

Esto da una idea exacta de las diferentes etapas en las que se inician los servicios. Pero dentro del mismo nivel de ejecución, las líneas Required-Start y Should-Start definen dependencias duras y blandas para el servicio en cuestión, _es decir, _servicios que deben ejecutarse y deberían ejecutarse antes del servicio que se está examinando. Sin los servicios Required-Start, el servicio en cuestión fallará, sin los servicios Should-Start en cambio no habrá un fallo general, posiblemente sólo la falta de algunas características útiles. Lo mismo ocurre en la parada con Required-Stop y Should-Stop.

SYSTEMD :

El comando para listar todos los servicios es

systemctl list-unit-files

que escupirá mucha información. Para seleccionar todos los servicios habilitados, es decir, los que se inician al arrancar, sólo hay que grep el comando anterior de la siguiente manera:

systemctl list-unit-files | grep enabled

Prefiero este comando a systemctl list-units: la diferencia es que éste sólo mostrará los servicios que su SO tiene en memoria = el SO cree que necesita), mientras que systemctl list-unit-files mostrará todos los servicios instalados, incluyendo los que están enmascarados (es decir, los que se supone que nunca se inician, ni siquiera manualmente), y los que no se activarán, que se llaman _estáticos. En otras palabras, el comando que sugerí es más completo que el que lista sólo los servicios activos.

NB : systemd es muy diferente de los sistemas init anteriores. En particular, no tiene niveles de ejecución, sino objetivos. Los runlevels siguen existiendo por razones de compatibilidad, y se pueden ver como objetivos específicos listando todos los objetivos disponibles mediante

systemctl list-unit-files --type=target

mientras que puedes ver tu objetivo actual mediante

$ systemctl get-default
  graphical.target

Para más información sobre esto, puedes leer la excelente página introductoria de DigitalOcean .

8
8
8
2015-04-09 19:26:26 +0000

Para la gestión de servicios de inicio simple en Raspberry Pi recomiendo la herramienta rcconf. Le permite fácilmente activar/desactivar servicios en /etc/init.d/. También puedes ver si están habilitados y se ejecutarán al inicio.

Para instalar la herramienta

sudo apt-get install rcconf

Y es muy sencillo utilizarla con la UI de texto

sudo rcconf
3
3
3
2014-12-15 11:09:00 +0000
sudo nano /etc/rc.local

Aquí es donde se inserta el archivo por lotes o los comandos a ejecutar en el arranque. Yo también ejecuto automáticamente Openvpn en el arranque :)

Preguntas relacionadas

6
10
5
37
14