Bashrc, script de shell e crontab

0

Estou tentando usar as funções definidas em /home/my_username/.bashrc em um script de shell executado pelo crontab.

#crontab -l

# m h  dom mon dow   command
  * *  * * * /bin/sh /home/my_username/CronTab_shell_script.sh >> /home/my_username/Desktop/file.log  

Digamos que eu tenha a função mounted () salva em

/home/my_username/.bashrc 

function mounted(){

    if mount|grep $1; then
    echo "mounted"
    else
    echo "not mounted"
    fi

 }

Como posso chamar e usar a função mounted () do

/home/my_username/CronTab_shell_script.sh
    
por IDK 13.09.2017 / 13:41

2 respostas

2

O Cron é executado com um shell limitado e não terá acesso ao seu ambiente normal.

Você pode colocar source /home/my_username/.bashrc no início de /home/my_username/CronTab_shell_script.sh para disponibilizar a função.

Você também pode criar seu .bashrc no seu crontab:

#crontab -l

# m h  dom mon dow   command
  * *  * * * . /home/my_username/.bashrc; /bin/sh /home/my_username/CronTab_shell_script.sh >> home/my_username/Desktop/file.log
    
por Gfei 13.09.2017 / 13:55
0

1. Execute o shell correto

* *  * * * /bin/sh .....

Você não está executando bash , você está executando sh , então você não deve esperar que .bashrc seja carregado!

Tente isso:

* *  * * * /bin/bash .....

2. Trabalhe em torno do padrão .bashrc do Ubuntu

Outro problema pode ser que o script .bashrc padrão do Ubuntu comece com essa proteção:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

As linhas adicionadas abaixo não serão carregadas pelo script do cron porque os cronjobs não são executados em um ambiente interativo.

A solução: Coloque funções para scripts acima deste guarda. Mantenha a configuração para o usuário abaixo deste guarda.

    
por joeytwiddle 04.10.2018 / 10:30