o cron encontrará certos comandos no PATH, mas não outros

1

Tendo problemas em fazer o crontab executar certos comandos, apesar de o PATH e o SHELL estarem configurados corretamente.

Aqui está o env da máquina:

SHELL=/bin/bash
USER=ubuntu
MAIL=/var/mail/ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin

Aqui está o env do cron (parece o mesmo):

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
PWD=/home/ubuntu

Em seguida, no crontab:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/gopath/bin
SHELL=/bin/bash
*/1 * * * * "whoami"
*/1 * * * * "whoami && which whoami"

A primeira tarefa whoami é bem-sucedida, mas a segunda falha com:

/bin/bash: whoami && which whoami: command not found

porque which não foi encontrado. No entanto, isso é muito estranho como:

$ which whoami
/usr/bin/whoami

$ which which
/usr/bin/which

E /usr/bin está no PATH no cron. O que dá?

    
por Jake 30.09.2014 / 19:08

2 respostas

2

Você não deve citar o cron job.

Você tem

*/1 * * * * "whoami && which whoami"

Que está procurando um comando chamado literalmente whoami && which whoami . Como /usr/bin/whoami && which whoami . Obviamente, este comando não existe. Remova as aspas para que o comando seja interpretado corretamente:

*/1 * * * * whoami && which whoami
    
por 30.09.2014 / 19:42
0

De um modo geral, se você deseja executar vários comandos em uma única tarefa Cron, você deve colocá-los em um script.

Você não deve colocar aspas duplas em torno de sua declaração assim. É provável que seja tratado como um literal. Se você estiver realmente empenhado em executá-los em linha, você pode fazer algo parecido com o seguinte: bash -c 'whoami && which whoami'

Mas, novamente, nesse ponto você deveria estar colocando seus comandos em um script de shell.

    
por 30.09.2014 / 19:16

Tags