Qualquer arquivo executado uma vez quando o sistema é inicializado

5

Existe algum arquivo de configuração que é avaliado uma vez, sempre que o sistema operacional é inicializado. O bashrc não se qualifica, pois é avaliado toda vez que um terminal do gnome é iniciado.

    
por Richard 28.05.2011 / 09:29

6 respostas

2

Existem 2 lugares que eu uso quando preciso adicionar comandos "run-once":

Uma vez em cada login de usuário (seja Graphical / GDM ou login de texto / console): ~/.profile

Prós:

  • Funciona mesmo se nenhum servidor GDM / X11 / Graphical for usado. O que significa que funcionará com logins de SSH e modo de texto
  • NÃO é avaliado quando um terminal gnome é iniciado, conforme necessário. SOMENTE no login
  • Executado com privilégios de usuário, é seguro e permite acesso total a scripts pessoais.
  • Executar depois que todas as montagens estiverem concluídas, de modo que todo o sistema de arquivos esteja disponível.

Contras:

  • Se um usuário efetuar login, efetuar logout e efetuar login novamente, ele será executado novamente, uma vez por login. Portanto, não é um "verdadeiro" sistema inicial apenas . Mas pode atender a sua necessidade.
  • Como isso é executado mesmo em logins em modo de texto, é recomendável NÃO colocar qualquer comando que exija um servidor GDM / X11 (como o daemon de sinergia)
  • O Bash é usado apenas com logins no modo de texto. Então, se você estiver usando o GDM, nenhum bashismo será aceito no script, já que o Ubuntu o executará com dash

Uma vez que o GDM inicia (antes de qualquer usuário fazer login): /etc/gdm/Init/Default

Prós:

  • Executado apenas uma vez, independentemente de quantos usuários fazem login ou logout
  • Pode ser usado para comandos gráficos e de texto
  • Executar depois que todas as montagens estiverem concluídas, de modo que todo o sistema de arquivos esteja disponível.

Contras:

  • Executar usando gdm user. Portanto, os scripts pessoais e o caminho para eles devem ser legíveis e executáveis em todo o mundo
  • Não pode ser usado se nenhum servidor GDM for usado (duh). Por isso não vai ser executado em start-ups em modo texto
  • Novamente, não corra no bash, então os bashisms devem ser evitados.

Use o método que atenda às suas necessidades.

    
por MestreLion 28.05.2011 / 12:17
5

cron pode ser útil aqui.

Além de começar algo em um minuto, hora, dia da semana, mês etc, ele também tem algumas operações especiais:

@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".

A edição é feita a partir da linha de comando com o seguinte comando:

sudo crontab -e

na parte inferior do arquivo (abaixo de # m h dom mon dow command ) você pode adicionar uma linha que executa o que você deseja, assim @reboot /directory/to/file será executada / directory / to / file durante a inicialização.

Apenas um aviso: é necessário certificar-se de que não há saída desse script ou que a saída seja redirecionada para um arquivo (ou / dev / null), pois não há exibição para o cron enviar a saída (e terminará a operação).

Exemplo sudo crontab -e

# For more information see the manual pages of crontab(5) and cron(8)
# 
PATH=/usr/sbin:/usr/bin:/sbin:/bin
# m h  dom mon dow   command
@reboot /usr/bin/testscript

e ...

cd /usr/bin/
sudo vi testscript 
echo "works" >/tmp/testing
chmod 775 testscript

Agora, para uma reinicialização ... E aqui está um exemplo prático:

ls -l /tmp/testing
-rw-r--r-- 1 root root 6 2011-05-29 08:34 /tmp/testing
rinzwind@discworld:/tmp$ more /tmp/testing
works
    
por Rinzwind 28.05.2011 / 09:41
2

Além de outras respostas, você pode colocar seus comandos de inicialização (superusuário) em /etc/rc.local .

    
por enzotib 28.05.2011 / 10:22
1

Você examinou os trabalhos do cron? Você pode definir um na reinicialização @reboot no seu crontab

    
por Ashfame 28.05.2011 / 09:41
1

Basta adicionar comandos a /etc/rc.local . É executado uma vez no final do processo de inicialização. Certifique-se de sair com o código de erro 0.

(0)asus-romano:~/PDF% cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Eu uso isso em outro computador desde ... desde ... bem, provavelmente Ultrix em 1989. Você tem que certificar-se de que seus trabalhos de script sejam chamados como root e sem interfaces gráficas. Uma maneira de testá-lo é executá-lo a partir de um console virtual (Ctrl-Alt-F1, Ctrl-Alt-F7 para voltar ao seu ambiente gráfico) em um shell de raiz ( sudo -i ).

Esteja avisado que um comando errado nesse shell pode destruir completamente o seu sistema.

    
por Rmano 03.01.2014 / 19:01
0

Além da solução crontab: Você pode fazer isso (como root) de forma não interativa via

echo "@reboot /path/to/runonce-script.bash" | crontab

e coloque neste script um

crontab -r

para removê-lo novamente. Além disso, o script será executado após cada reinicialização.

    
por user231376 03.01.2014 / 17:22