O script de shell não está sendo executado com o Cron, mas é executado manualmente

2

Eu sinto que tentei de tudo, meu histórico de pesquisa é de cerca de 20 páginas no google tentando consertar isso e nada funciona. Basicamente, eu tenho um script que verifica se a minha interface tun0 existe e, se estiver faltando, o computador será reiniciado. Aqui está o código:

#!/bin/bash
. /etc/profile
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if echo 'ifconfig' | grep -q "tun0"
then echo ""
else
    reboot
fi

O próprio script é executado corretamente se eu invocá-lo em um terminal usando seu caminho:

/scripts/vpnrestart1.sh

Eu adicionei isso no topo do crontab -e:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Minha tarefa Cron é assim:

* * * * * /scripts/vpnrestart1.sh

As permissões estão bem no script em si e podem ser executadas sem o uso do sudo. Como mencionei, ele funciona bem no terminal e funciona como projetado. Mas se eu colocá-lo no cron e remover a interface tun0, nada acontece.

    
por coltsfan95 12.08.2016 / 05:26

2 respostas

1

Você já tentou depurar seu script para ver o que acontece quando executado por cron ? Insira abaixo o código no seu script:

# log stdout and stderr to two different files
exec >>/var/log/looog.log 2>>/var/log/looog.err.log

# ...and log every command we try to execute to stderr (aka looog.err.log)
set -x

Quando o script for executado, esses dois arquivos serão gerados e você poderá ver o que está acontecendo.

    
por 12.08.2016 / 15:31
1

Se a execução de reboot diretamente como um usuário não-raiz funciona quando você está logado, é porque seu sistema está configurado para permitir que usuários fisicamente conectados façam a reinicialização do sistema. Isso funciona através do Polkit .

De um crontab, você não está em uma sessão de login. Um cron job que reinicia o sistema teria que ser executado como root.

Não acho que a reinicialização seja a solução para criar uma interface de rede. Basta ligar para o que você faz normalmente para abrir a VPN. E você provavelmente precisará ser o root para fazer isso (você precisa ser root para configurar uma interface de rede, portanto vpnrestart1.sh deve ser executado como root ou obtém permissões de root por meio de um programa setuid como sudo para o crítico partes, ou delega para o NetworkManager que pode usar o Polkit para permitir que algumas sessões do usuário afetem a configuração do sistema).

    
por 15.08.2016 / 23:48

Tags