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.

Malabarba
fonte
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

Kees Cook
fonte
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.

Gilles 'SO- parar de ser mau'
fonte
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'