executa a função .profile como tarefa cron

4

No arquivo .profile do usuário root , defini uma função, por exemplo,

function printDate() {
  date
}

Eu quero executar essa função a cada minuto e anexar a saída ao cron.log. Eu tentei adicionar a seguinte entrada crontab:

* * * * * printDate > $HOME/cron.log 2>&1

Mas isso não funciona. O arquivo cron.log é criado, mas está vazio. Eu acho que isso é porque o .profile não é lido pelo cron, portanto, quaisquer funções / aliases definidos nele não estão disponíveis para ele. Então eu tentei mudar a entrada do crontab para:

* * * * * source $HOME/.profile;printDate >> $HOME/cron.log 2>&1

Mas isso também não funciona. Parece que o cron ainda não tem acesso à função printDate porque vejo o seguinte em cron.log

/bin/sh: printDate: not found
    
por Dónal 03.04.2012 / 14:06

1 resposta

4

Basta envolvê-lo em outro script bash. Seus nomes de arquivos serão diferentes, mas eu tenho: teste (.profile)

#!/bin/bash
function printDate() {
  date
}

wrap (um novo script que você pode colocar em qualquer lugar, basta alterar o URL)

#!/bin/bash
cd ~/
source ./test
printDate > ./date.log

quando executado a partir de um / bin / sh

$ ls
test  wrap
$ ./wrap
$ cat date.log
Wed Apr 11 11:49:39 EDT 2012
$ 

Agora, certifique-se de que seus caminhos / ambiente estejam corretos

As linhas crontab que acabei de testar foram:

SHELL=/bin/sh
HOME=/root
* * * * * $HOME/wrap >/dev/null 2>&1
    
por RobotHumans 11.04.2012 / 17:50

Tags