man 5 crontab
é bastante claro sobre como usar o crontab para executar um script na inicialização:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
Então, felizmente, adicionei uma única linha ao meu crontab (na minha conta de usuário, não no root):
@reboot /home/me/myscript.sh
Mas, por alguma razão, o myscript.sh não seria executado na reinicialização da máquina. (ele funciona bem se eu o chamar na linha de comando, portanto, não é um problema de permissão)
o que estou perdendo?
Atualize para responder às perguntas do @ Anthon:
- Versão do Oracle-linux: 5.8 (uname: 2.6.32-300.39.2.el5uek # 1 SMP)
- Versão do Cron: vixie-cron-4.1-81.el5.x86_64
- Sim,
/home
é uma partição montada. Parece que este é o problema. Como faço para solucionar isso? - Atualmente,
myscript.sh
apenas faz eco de uma mensagem de texto em um arquivo/home/me
.
/home
uma partição montada? Qual é o conteúdo do seu/home/me/myscript.sh
?@reboot
. oss.oracle.com/pipermail/el-errata/2012-March/002655.htmlmyscript.sh
executável?chmod +x myscript.sh
.Respostas:
Isso pode ser um tópico um pouco confuso, porque existem diferentes implementações do cron. Também houve vários bugs que quebraram esse recurso e também existem alguns casos de uso em que ele simplesmente não funciona, especificamente se você fizer um desligamento / inicialização versus uma reinicialização.
Insetos
ponto de dados # 1
Um desses erros no Debian é abordado aqui, intitulado: cron: @reboot jobs não são executados . Isso parece ter entrado no Ubuntu também, o que não posso confirmar diretamente.
ponto de dados # 2
A evidência do bug no Ubuntu parece estar confirmada aqui nesta sessão de perguntas e respostas, intitulada: @reboot cronjob não em execução .
excerto
A resposta aceita nas perguntas e respostas também teve este comentário:
Evidência adicional
ponto de dados # 3
Como evidência adicional, havia esse tópico de que alguém estava tentando a mesma coisa e ficava frustrado por não ter funcionado. O título é: Tópico: Cron - os trabalhos do @reboot não estão funcionando .
excerto
Depois que o usuário acima descobriu seu problema, ele conseguiu
@reboot
trabalhar com a entrada crontab de um usuário.Não tenho certeza de qual versão do cron é usada no Ubuntu, mas isso parece indicar que o usuário também pode usar
@reboot
ou que o bug foi corrigido em algum momento nas versões subseqüentes do cron.ponto de dados # 4
Eu testei no CentOS 6 o seguinte e funcionou.
Exemplo
Eu então reiniciei o sistema.
Após a reinicialização.
Aprendizado
Para saber mais sobre como o mecanismo real funciona,
@reboot
me deparei com este post do blog que discute as entranhas. É intitulado: @reboot - explicando a mágica simples do cron .Crond de depuração
Você pode aumentar a verbosidade
crond
adicionando o seguinte a este arquivo de configuração nas distros baseadas em RHEL / CentOS / Fedora.Os níveis válidos são 0, 1 ou 2. Para reverter esse arquivo para o nível de log padrão, remova-o
"-L 2"
quando terminar de depurar a situação.fonte
@reboot
em ordem em certos crons e, aparentemente, com erros / outros em outros. Daí a confusão.@reboot
funcionou quando você percebeu que estava tentando acessar uma unidade criptografada, que ainda não havia sido montada.@reboot sleep 60; <your command>
. Para citar o fio "meu palpite é que directiva @reboot do cron está em execução muito cedo no processo de inicialização"Descobri que, na minha máquina Ubuntu, ainda não tenho acesso aos serviços de DNS no momento do @reboot. Isso me impediu de montar volumes remotos. Essa solução brega, porém simples, funcionou:
@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log
(no cron raiz; últimas partes apenas para depuração)
fonte
Também tenho o mac osx e tive o mesmo problema em que meu script não estava sendo executado. mas quando eu corrigi meu script para gostar
Funcionou bem para mim. certifique-se de tornar seu arquivo shell executável executando o comando
fonte
Não sei se você já resolveu isso ou se alguma das opções acima foi a solução que você precisava, mas outra possibilidade é:
se você tiver seu diretório / home criptografado, ele poderá não estar disponível até você efetuar login, ou seja, não estará disponível na reinicialização.
Nesse cenário, você pode mover seus scripts para outro local como / srv ou / opt ou / usr / local / bin / etc.
fonte
Faça uma nova instalação do Ubuntu Gnome 13.10 (usuário padrão no meu caso: avanderneut).
E veja que, após a reinicialização, o arquivo
/var/tmp/xxx
existe, embora não existisse antes da reinicialização.Isso foi feito com o cron versão 3.0.
Você deve garantir que não sejam utilizados discos de serviços, etc., que talvez não estejam disponíveis no momento em que o script for executado. Comece com algo simples como o descrito acima e verifique se ele não possui saída de terminal, pois o e-mail provavelmente não está funcionando.
Você também pode precisar de um cron mais atualizado (ou uma atualização do oracle-linux) se isso não funcionar para você e você precisar desse recurso.
fonte
/dev/mapper/VolGroup00-LogVol01
partição montável .cron
. Você deve IMHO seguir uma rota diferente da crontab & @reboot para executar algo uma vez na inicialização como usuário.Eu diria que sim para a pergunta. Só tive dificuldades com a execução do cron na reinicialização (Debian 3.10.70) e conseguiu resolver com:
@reboot root /usr/bin/python3 /path/to/script
E um caractere de nova linha '\ n' no final
Este é o conteúdo do arquivo:
Por fim, acho que vale a pena notar um resumo de
man 5 crontab
fonte
Primeiro de tudo, você deve fazer login como root:
Em seguida, abra o crontab:
Depois disso, adicione seu script ao crontab como root, como abaixo:
Como resultado, vi que meu script funcionava corretamente.
Nota: Se você editar o crontab com seu usuário atual, a reinicialização não poderá chamar seu script corretamente.
fonte
prueba:
usuario @ ubuntu: ~ $ touch script.sh usuario @ ubuntu: ~ $ chmod + x script.sh
usuario @ ubuntu: ~ $ $ crontrab -e
@reboot /home/usuario/script.sh
salve e reinicie seu pc
fonte