Executando script via crontab na reinicialização [duplicado]

0

Estou usando o Ubuntu Server 16.04. Toda vez que eu fizer login, preciso executar manualmente meu script: /home/user/ini.sh . Esse script chama outros scripts que precisam de sudo permissions, portanto, recebo o prompt, insiro minha senha e termino. Agora eu quero configurar uma maneira de executar o script automaticamente quando o sistema for iniciado.

Eu usei crontab -e e adicionei a linha

@reboot /home/user/ini.sh

Isso não parece funcionar. Eu tentei diferentes opções, como sugerido por outros usuários em aqui , < um href="https://sobrelinux.info/questions/6404/does-ubuntu-support-reboot-in-crontab"> aqui , aqui ou aqui .

@reboot user    /home/user/ini.sh
@reboot root    /home/user/ini.sh
@reboot sh      /home/user/ini.sh
*/1 * * * *     /home/user/ini.sh
....

adicionando SHELL=/bin/bash ... Mas não consigo fazer funcionar. Eu também tentei

@reboot echo "yes" > /home/user/yes.txt

E o arquivo é criado - vazio, sem conteúdo (isso demonstra que algo está funcionando, mas estou cometendo um erro em algum lugar).

Onde está o meu erro?

EDITAR

Eu também sem sucesso tentei usar sudo crontab -e e usar

@reboot root    /home/user/ini.sh
    
por user1156544 14.02.2018 / 14:21

1 resposta

3

Existe uma grande diferença entre reboot e login , e seu sistema trata os dois de forma bem diferente.

  • Os jobs REBOOT são executados pelo usuário raiz (não pelo usuário) e devem estar sem cabeçalho (sem exibição). A melhor maneira de executar tarefas de inicialização no 16.04 e mais recente é criar um service e inclua esse serviço no destino do systemd apropriado durante o processo de inicialização.

  • As tarefas de LOGIN são executadas pelo usuário (não raiz) depois que você digita sua senha. A melhor maneira de fazer trabalhos de login é colocá-los no diretório ~/.config/autostart/ .

Mas você tem um segundo problema. Você parece querer um trabalho em nível de usuário para usar serviços em nível de raiz. Existem muitas maneiras de fazer isso.

  • A maneira mais fácil é simplesmente executar seu script como root manualmente todos os dias. Você já sabe como fazer isso, então vamos ver outras opções.

  • A maneira mais rápida é hackear o arquivo sudoers e gerar um conjunto especial de permissões. No entanto, pode não ser feito backup adequadamente com o restante do sistema, o AppArmor pode bloquear algumas ações de qualquer maneira e é difícil solucionar problemas e manter.

  • A maneira apropriada é separar suas funções de nível de usuário e nível raiz em dois scripts separados e usar o dbus para iniciar o script de nível raiz e retornar sua saída. Isso é fácil de manter e solucionar problemas, mas requer a maior habilidade e um pouco de aprendizado sobre o dbus.

por user535733 14.02.2018 / 16:21