Gostaria de agendar um comando para ser executado após a reinicialização em uma caixa do Linux. Eu sei como fazer isso para que o comando seja executado consistentemente após cada reinicialização com uma @reboot
entrada crontab, no entanto, eu quero que o comando seja executado apenas uma vez. Após a execução, ele deve ser removido da fila de comandos a serem executados. Estou procurando essencialmente um Linux equivalente ao RunOnce no mundo do Windows.
Caso isso importe:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
Existe uma maneira fácil e com scripts de fazer isso?
linux
scheduled-task
Christopher Parker
fonte
fonte
Respostas:
Crie uma
@reboot
entrada no seu crontab para executar um script chamado/usr/local/bin/runonce
.Crie uma estrutura de diretórios chamada
/etc/local/runonce.d/ran
usingmkdir -p
.Crie o script da
/usr/local/bin/runonce
seguinte maneira:Agora colocar qualquer script que você deseja executar na próxima reinicialização (apenas uma vez) no diretório
/etc/local/runonce.d
echown
echmod +x
-lo adequadamente. Depois de executado, você o verá movido para oran
subdiretório e a data e hora anexadas ao seu nome. Também haverá uma entrada no seusyslog
.fonte
man logger
.$file
variável contém o caminho completo ou apenas o nome do arquivo?Eu realmente aprecio o esforço feito na resposta de Dennis Williamson . Eu queria aceitá-lo como resposta a esta pergunta, pois é elegante e simples, no entanto:
Eu acho que sua solução seria ótima como um recurso pronto para uso em uma distribuição Linux.
Dito isto, escrevi meu próprio roteiro para realizar mais ou menos a mesma coisa que a solução de Dennis. Não requer etapas extras de configuração e não requer acesso root.
Salve esse script (por exemplo:
runonce
),chmod +x
e execute:No caso de um erro de digitação, você pode remover um comando da fila de runonce com o sinalizador -r:
O uso do sudo funciona da maneira que você esperaria. Útil para iniciar um servidor apenas uma vez após a próxima reinicialização.
Algumas notas:
fonte
Criar, por exemplo
/root/runonce.sh
:Adicionar a
/etc/rc.local
:fonte
Configure o script em /etc/rc5.d com um S99 e faça com que ele seja excluído após a execução.
fonte
Você pode fazer isso com o
at
comando, embora eu note que você não pode (pelo menos no RHEL 5, que eu testei) usarat @reboot
ouat reboot
, mas você pode usá-loat now + 2 minutes
e depoisshutdown -r now
.Isso não requer que seu sistema demore mais de 2 minutos para ser executado.
Pode ser útil onde você deseja configurar 0, embora eu prefira que o comando 'runonce' seja um kit padrão.
fonte
atd
ser parado, seu comando poderá ser executado durante o desligamento. Isso pode ser evitado parandoatd
antes de eliminar o comandoatd now
e, em seguida, reiniciar.Eu acho que essa resposta é a mais elegante:
Coloque o script
/etc/init.d/script
e exclua-o automaticamente com a última linha:rm $0
A menos que o script seja 100% à prova de falhas, provavelmente é aconselhável lidar com exceções para evitar um loop de erro fatal.
fonte
Eu costumava
chkconfig
fazer meu sistema executar automaticamente um script uma vez após a inicialização e nunca mais. Se o seu sistema usa ckconfig (Fedora, RedHat, CentOs, etc), isso funcionará.Primeiro o script:
run-once
/etc/init.d/
chkconfig run-once on
Quando o sistema inicializar, seu script será executado uma e nunca mais.
Ou seja, nunca mais, a menos que você queira. Você sempre pode reativar o script com o
chkconfig run-once on
comandoEu gosto dessa solução porque coloca um e apenas um arquivo no sistema e porque o comando executar uma vez pode ser reemitido, se necessário.
fonte
nos sistemas redhat e debian, você pode fazer isso em /etc/rc.local, é um tipo de autoexec.bat.
fonte