Conseguir que um script seja executado na inicialização, não no login


11

Como posso executar um script específico (de preferência não como superusuário) sempre que a máquina inicializar, mas antes do login. Pode ser a última coisa a ser executada na inicialização. Eu só quero que o script funcione mesmo que nenhum usuário faça login.


1
@bruce dê uma olhada nisto -> askubuntu.com/questions/9382/…
hhlp

1
Você pode usar o upstart ou cron ou, provavelmente, vários outros métodos. Uma coisa importante a saber é também quão cedo ele pode ser executado. Por exemplo, ele precisa de um sistema de arquivos específico para ser montado, precisa de X para rodar, precisa de DBus, precisa de rede - ou mais em geral: precisa de recursos para estar presente?
JanC 27/10/10

@ JanC: Sim, na verdade, ele precisa de quase tudo o que você pediu (exceto o X), e é por isso que eu gostaria que fosse a última coisa a ser executada. Também não há razão para executá-lo mais cedo.
Malabarba 27/10/10

@hhlp: Legal, obrigado. Mas com que antecedência o script será executado se eu usar esse método? Como mencionei acima, é melhor que seja uma das últimas coisas (antes do login).
Malabarba 27/10/10

Bem, o login não requer rede, a menos que você queira fazer login em um servidor de terminal e / ou tenha seu $ HOME em um compartilhamento de rede ... ;-)
JanC

Respostas:


8

Eu recomendaria usar cron. O valor do tempo especial @rebootgerará seu trabalho a cada reinicialização como seu usuário. Por exemplo, execute crontab -ee use:

@reboot /home/yourself/bin/some_script_to_run

Para mais detalhes sobre os formatos especiais de hora, consulte man 5 crontab


Obrigado, parece fácil o suficiente. Isso não depende de qual usuário cria o cronjob certo? É executado no final da inicialização, independentemente de logins?
Malabarba 28/10/10

Depende absolutamente de quem criou o cronjob - ele será executado como esse usuário. Mas não dependem deles para estar conectado.
Kees Cozinhe

Lembre-se de que isso executa o script quando o daemon cron é iniciado, portanto, é possível que outro sistema que você possa precisar ainda não esteja pronto.
precisa saber é o seguinte

4

Uma possibilidade é usar o Upstart. Isso permite que você especifique quando deseja executar seu script em termos de dependências, por exemplo, “quando os sistemas de arquivos estiverem montados e a interface de rede eth0estiver em funcionamento”. Crie um arquivo /etc/init/bruce_script.conf(você precisa criar o arquivo como root) contendo algo como isto:

description "Bruce's boot script"
start on filesystem and net-device-up IFACE=eth0
task
exec su -c '/home/bruce/script' bruce

Consulte a documentação inicial para obter mais informações, em particular a init(5)página de manual para obter uma lista do que você pode colocar nesse arquivo de configuração.


Existe uma lista de eventos iniciantes que podem ser usados?
quer

@ Markus: não que eu saiba. Os eventos padrão têm uma página de manual na seção 7 (assim dpkg -L upstart |grep /man7/), e você pode ver os eventos emitidos e usados ​​como gatilhos nos scripts existentes no /etc/init.
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.