Início do trabalho do Crontab +1 min após @reboot

44

Precisa de um script executado a cada reinicialização em +1 minuto. Eu coloquei um registro, @rebootmas ainda é muito cedo para o meu script. Como executá-lo algum tempo após a reinicialização?

Yurij73
fonte
3
Por que é muito cedo ? Talvez um script init seja mais adequado (considerando dependências, por exemplo, esse script precisa que a rede seja configurada primeiro )?
sr_ 07/12/12
meu script precisa ser executado após todos os outros, o último em palavras curtas
Yurij73
como seu trabalho precisa ser executado depois de tudo e como o conceito de tudo é bastante variável (a adição de um novo aplicativo de inicialização automática @ reboot não é tão incomum), acho que cabe a você colocar seu trabalho nos scripts rc em um maneira que servidores seu propósito. Colocar sua tarefa na parte inferior das tarefas especificadas em /etc/rc.local é geralmente o que você deseja, mas, dependendo da configuração de inicialização do sistema, isso pode não ser verdadeiro o tempo todo. Então, teste e veja se funciona para você.
MelBurslan
Parece um caso para Upstart?
Nafg

Respostas:

68

O script só tem a intenção de executar um minuto após a inicialização ou também pode ser usado em outros momentos? No primeiro caso, você pode adicionar sleep 60ao início do seu script ou, no último caso, adicioná-lo ao arquivo crontab:

@reboot sleep 60 && my_script.sh

Como foi indicado por sr_, porém, talvez você esteja lidando com isso da maneira errada, e um script init.d ou rc.d adequado seria uma solução mais robusta.

D_Bye
fonte
1
Ou use uma opção de linha de comando para ajustar o atraso (por exemplo, o script -s Xque seria traduzido para sleep Xdentro do script).
Peterph
Posso aplicar isso ao arquivo taskrunner em /etc/init.d/?
Andres Anjo
@AndresAngel - me desculpe, eu não sei. Eu uso FreeBSD que não tem taskrunner, nem, para esse assunto,/etc/init.d
D_Bye
no meu rhel7, o sono não funciona, dorme para sempre e nunca volta.
Inder R Singh
15

Se você precisar executar algo após a reinicialização quando a rede estiver disponível, por exemplo, você pode escrever a unidade systemd que será executada no tempo necessário (é claro que isso funcionará apenas em sistemas com systemd).

Para fazer isso, crie um arquivo /etc/systemd/system/my_script.servicecom o seguinte conteúdo:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Em seguida, execute:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Você está feito!

Envek
fonte
11

Eu usaria at. Como em:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... com a ressalva mencionada adicional de que se o que você realmente deseja é executá-lo depois de todas as outras coisas, você deve verificar como fazer isso no init que o seu sistema operacional está usando.

clacke
fonte