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)