Eu desejo criar um script que será executado na inicialização do nível de execução 3 apenas uma vez.
Portanto, agora eu faço testes para ver se a execução realmente funciona.
Eu tentei criar um arquivo em /etc/init.d/myscript que contém:
#!/bin/bash
OUT="/dev/tty1"
echo -e "Hello world!" > $OUT
ps auxf > /path_to_some_folder/_script_ps_auxf.txt
runlevel > /path_to_some_folder/_runlevel.txt
id -u > /path_to_some_folder/id.txt
pwd > /path_to_some_folder/pwd.txt
Esse arquivo tem bit de execução habilitado para todos os usuários (ugo).
Também criei um link simbólico para /etc/init.d/myscript at /etc/rc3.d/S99myscript .
Então eu:
- logout do meu usuário.
- pressione
CTRL + ALT + F2 para ver tty2 .
- Faça login no meu usuário e
sudo service lightdm stop para desativar a GUI.
- Em seguida,
sudo init 3 para estar no nível de execução 3.
Mas os arquivos em /path_to_some_folder/ não existem após o init 3 . Por quê?
Eu também tentei várias outras variações dos itens acima - incluindo o uso de update-rc.d .
Além disso, tentei editar /etc/rc.local de modo que o código em /etc/init.d/myscript esteja incorporado a /etc/rc.local antes da linha exit 0 , mas ainda assim nada acontece (nenhum arquivo é criado).
Atualização 6 de outubro, 18:00 UTC:
Por algum motivo, agora posso ver todos os arquivos no diretório /path_to_some_folder/ :
(Eu adicionei a todos os arquivos um sublinhado _ , a fim de distingui-los melhor de outros arquivos)
$ ls /path_to_some_folder/_*
/path_to_some_folder/_id.txt /path_to_some_folder/_pwd.txt /path_to_some_folder/_runlevel.txt /path_to_some_folder/_script_ps_auxf.txt
Ao inspecionar seu tempo, todos eles são criados quando o sistema é ligado.
Ao inspecionar o arquivo /path_to_some_folder/_script_ps_auxf.txt , notei que o processo de inicialização foi iniciado:
/bin/bash /etc/init.d/myscript start
Portanto, entendo que os scripts de inicialização funcionam.
De fato, quando pressiono CTRL + ALT + F1 para ver tty1 , noto o texto "Hello world!" no topo (antes do prompt de login).
O único problema é perceber:
- Por que eles trabalham agora?
-
Por que o script é executado no nível de execução padrão do Ubuntu 16.04?
Eles devem ser executados apenas no nível de execução 3, consulte:
$ ls -1 /etc/rc*.d/*myscript*
/etc/rc3.d/S99myscript
Respondendo a pergunta # 1 eu mesmo:
Eu suspeito que uma reinicialização foi necessária para que os scripts de inicialização funcionassem.
Sobre a questão nº 2:
O arquivo /etc/inittab não existe, portanto não pode determinar o nível de execução:
$ ls /etc/inittab
ls: cannot access '/etc/inittab': No such file or directory
O nível de execução padrão, de acordo com /etc/init/rc-sysinit.conf , é 2 :
$ grep -m 1 DEFAULT_RUNLEVEL= /etc/init/rc-sysinit.conf
env DEFAULT_RUNLEVEL=2
Não há parâmetros de linhas de comando do kernel de acordo com o arquivo /etc/default/grub :
$ less /etc/default/grub | grep GRUB_CMDLINE_LINUX=
GRUB_CMDLINE_LINUX=""
Quando eu ligo o meu PC e faço login no meu usuário, percebo que meu nível de execução é 5 :
$ runlevel
N 5
Meu script deveria ser executado no nível de execução 3 somente .
Alguma idéia do que está acontecendo?
Atualização 6 de outubro, 18:40 UTC:
Eu entendo agora - o nível de execução do Ubuntu é diferente dos padrões, veja: link
Isso significa que os níveis de execução 2 to 5 são todos iguais:
Graphical multi-user plus networking (DEFAULT)