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

Como saber que serviços funcionam no arranque em Raspberry Pi? (framboesa)

Tenho alguns serviços que funcionam no porta-bagagens, mas na verdade esqueci-me como os montei! Se eu quiser mudar a sua actividade, como posso fazer isso? Por exemplo, talvez eu queira desactivar um serviço a partir do arranque ou talvez eu queira iniciá-lo utilizando um método diferente.

Especificamente, tenho no serviço openvpn que corre com sucesso no arranque, mas alguns tutoriais dizem que devo ligar o serviço de programas de partilha de ficheiros ao próprio vpn para que, se o vpn cair, o serviço de partilha de ficheiros também caia. Mas penso que talvez o autorunning do meu vpn esteja a complicar as coisas e eu deveria desactivá-lo ou modificar a forma como ele é lançado. Mas como verificar?

Respostas (3)

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

Presumo que tenha um Raspberry usando framboesa, que, tanto quanto sei, ainda não passou para o systemd. Neste caso, a resposta é a seguinte.

EDIT: para systemd (Jessie ou posterior), ver no fundo.

Primeiro, pode determinar qual o sistema que está currentemente a funcionar por meio do comando:

sudo service --status-all

Obterá uma lista um pouco como esta:

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

Os +‘s indicam serviços em execução, os -’s serviços não em execução, os ?’s serviços que não permitem status como um possível comando: são na sua maioria comandos que não precisam de correr o tempo todo, apenas ocasionalmente.

Para voltar à sua pergunta, precisa de compreender nível de execução no Linux. Os níveis de execução (0-6 + S) identificam quais os serviços que podem/deve ser executados. Uma sequência de arranque progride a partir de um runlevel inicial (especificado em /etc/inittab, no meu Raspberry

# The default runlevel.
 id:2:initdefault:

esta linha identifica-o como 2, e depois progride para o seu runlevel final padrão de distro (de 2 a 5). Identifica o seu runlevel actual por meio do comando

# runlevel
 N 2

(no meu caso, um servidor sem cabeça). Os outros runlevels são (novamente de é/etc/inittab*):

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

Utilizador único (1) é frequentemente também identificado como S.

Numa inicialização normal, assim começa em 2, e progride até 5. Para encontrar os serviços iniciados nesta progressão, emitir o 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

Isto imprime a linha que começa com Default-Start em todos os ficheiros em /etc/init.d/, que é onde são guardados os ficheiros que identificam os vários serviços. A linha em questão identifica o nível de execução onde cada serviço deve ser iniciado. Se um serviço é iniciado no nível de execução N, quando o sistema progride para N+1 não precisa de ser iniciado novamente, mas se não for encontrado em execução, é iniciado.

Isto dá-lhe uma ideia exacta das diferentes fases em que os serviços são iniciados. Mas dentro do mesmo nível de execução, as linhas Required-Start e Should-Start definem dependências duras e suaves para o serviço em questão, i.e. serviços que devem correr e devem correr antes do serviço ser examinado. Sem os serviços Required-Start, o serviço em questão falhará, sem os serviços Should-Start não haverá falha geral, possivelmente apenas a falta de algumas características úteis. O mesmo ocorre quando se pára com o serviço de Paragem Necessária-Paragem e de Dever-Paragem.

SYSTEMD :

O comando para listar todos os serviços é

systemctl list-unit-files

o que irá cuspir muita informação. Para seleccionar todos os serviços enabled, i.e, aqueles que são iniciados no arranque, basta saudar o comando acima como se segue:

systemctl list-unit-files | grep enabled

prefiro este comando a systemctl list-units: a diferença é que este apenas exibirá serviços que o seu SO tem na memória = o SO pensa que precisa), enquanto que systemctl list-unit-files exibirá todos os serviços instalados, incluindo aqueles que são masked (i.e. aqueles que supostamente nunca serão iniciados, nem mesmo manualmente), e aqueles que serão **não* activados, que são chamados static. Por outras palavras, o comando que sugeri é mais abrangente do que o que lista apenas static serviços.

NB* : systemd é muito diferente dos sistemas init anteriores. Em particular, não tem níveis de execução, mas objectivos. níveis de execução ainda existem por razões de compatibilidade, e podem ser vistos como alvos específicos listando todos os alvos disponíveis através de

systemctl list-unit-files --type=target

enquanto pode ver o seu alvo actual através de

$ systemctl get-default
  graphical.target

Para mais sobre isto, pode ler A excelente página introdutória da DigitalOcean .

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

Para uma gestão simples do serviço de arranque em Raspberry Pi recomendo a ferramenta rcconf. Permite-lhe ligar/desligar facilmente os serviços em /etc/init.d/. Também pode ver se estão activados e se funcionarão no arranque.

Para instalar a ferramenta

sudo apt-get install rcconf

E é muito simples de utilizar com o texto UI

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

Aqui é onde se insere o ficheiro de lote ou comandos para correr no arranque. Eu também corro automaticamente Openvpn no arranque :)