Atualmente, estou tentando entender a diferença entre init.d
e cron @reboot
para executar um script na inicialização / inicialização do sistema.
O uso de @reboot
(este método foi mencionado neste fórum por hs.chandra ) é um pouco mais simples, basta entrar crontab -e
e criar um @reboot /some_directory/to_your/script/your_script.txt
e your_script.txt
deve ser executado sempre que o sistema for reiniciado. Uma explicação detalhada de @reboot
está aqui
Como alternativa, incorporando /etc/init.d/your_script.txt
a segunda linha do seu script, ou seja:
#!/bin/bash
# /etc/init.d/your_script.txt
Você pode executar chmod +x /etc/init.d/your_script.txt
e isso também deve resultar em your_script.txt
execução sempre que o sistema for inicializado.
Q1: Quais são as principais diferenças entre os dois?
P2: Qual é mais robusto?
Q3: existe um melhor dos dois?
P4: Essa é a maneira correta de incorporar um script para executar durante a inicialização?
Estarei incorporando um arquivo .sh do bash para executar durante a inicialização.
Respostas:
init.d
, também conhecido como script SysV, destina-se a iniciar e parar serviços durante a inicialização e o desligamento do sistema. (os/etc/init.d/
scripts também são executados em sistemas habilitados para systemd para compatibilidade).start
estop
mais (veja a política Debian )crontab
(e, portanto@reboot
).@reboot
script (não apenas root)multi-user.target
./etc/rc.local
é frequentemente considerado feio ou preterido (pelo menos por redhat ), mas ainda tinha alguns recursos interessantes:rc.local
foi (quase) o último serviço a ser iniciado.rc.local
é executado depoisnetwork.target
por padrão (nãonetwork-online.target
!)Em relação ao systemd
network.target
enetwork-online.target
, leia Serviços em execução depois que a rede estiver ativa .fonte
/var/run/crond.reboot
arquivo toda vez, se eu quiser que os trabalhos do cron @reboot sejam executados toda vez que o sistema for iniciado. Se este arquivo não existir, as tarefas do cronograma do @reboot não serão executadasEm primeiro lugar, há um esclarecimento:
httpd
oucron
Em termos de se é melhor usar
rc.local
oucron
executar o seu script, suspeito que seja mais uma questão de estética do que de praticidade.cron
, como planejador de tarefas, destina-se a um método para executar manutenção ou manutenção em uma máquina, como verificar atualizações, limpar caches ou executar auditorias de segurança. Isso não significa que está limitado a executar essas funções, pois ele pode executar qualquer script ou comando desejado no horário especificado (como@reboot
).Utilizando
rc.local
, por outro lado, iria cair mais dentro de um tipo de configuração do sistema de tarefa, comorc.local
, a ser executado pelas máquinas sistema de inicialização, é tipicamente responsável por definir a configuração de rede de máquinas, serviços ou ambientes (mas, novamente, não se limita a apenas esta tarefa).Ambos os pontos, no entanto, devem ser temperados pelo fato de que nem todos os sistemas init oferecem um
rc.local
mecanismo, e nem todos os daemons cron oferecem um@reboot
tag psuedo.Pontos bônus
Como mencionado,
init.d
é o diretório que contém os scripts que controlam os serviços que podem ser iniciados ou parados no seu sistema (pelo menos em máquinas que usam umSysV
sistema init do tipo). Dependendo do seu sistema init e da finalidade do seu script, pode ser razoável converter seu script em um script init para ser executado da mesma maneira que um serviço. Isso, no entanto, depende muito do seu sistema init, pois a estrutura em torno de como esses arquivos são construídos pode diferir bastante.Última palavra
Também deve-se notar que os scripts bash geralmente terminam com um sufixo em
.sh
vez de.txt
, pois isso indica imediatamente que o arquivo é um script de shell em vez de um arquivo de texto. Dito isto, desde que ele tenha um shebang (#!/bin/bash
) na parte superior do arquivo ou seja chamado comobash /path/to/script.whatever
, não deve importar em termos de execução do script.fonte
bash
scripts geralmente não (e provavelmente não deveriam) terminar com umash
extensão..sh
vez de.txt
" - o significado específicosh
é mais preciso como uma extensão de nome de arquivo para scripts bash (ou outros scripts shell) do que otxt
que normalmente indica texto sem formatação. Você pode usar qualquer extensão que faça você rir, mas convenção comum seria, se o uso de uma extensãosh
fosse mais apropriado e comumente usado; embora não seja necessário, especialmente para scripts que devem ser executados a partir doPATH
.Estou escrevendo minha resposta abaixo;
Além das diferenças mencionadas por outros usuários acima, gostaria de destacar o ponto em que o @reboot depende do daemon crond. Você depende da ordem em que a contagem inicia. Embora na maioria dos casos, o crond comece bem, mas pode falhar em algum momento (pelo menos eu vi algumas falhas em alguns dos meus projetos). Quando você escreve um script de inicialização, normalmente ocorre uma falha se você fizer algo errado no seu script (por exemplo, confiar em um serviço que será iniciado após o serviço)
Com base no exposto, acho que o init é mais robusto. Mas há outro ponto mencionado por "Franklin Piat" na primeira resposta. Geralmente você precisa do script init para um daemon e deve seguir a política
Eu acho que não (o rc.local é um pouco antigo e obsoleto)
Sim. Geralmente, os criadores de aplicativos / pacotes fazem dessa maneira.
fonte