O shell Cron ignora o comando runuser - por quê?

1

Eu tenho dois scripts bash. Um é executado como root e chama outro como usuário "paralelo"

/root/cronrun.sh

#! /bin/bash

PARR="thisparameter"

echo "Starting at 'date'" >> /root/rlog.log
runuser -l parallels -c "/home/parallels/testscript/newscript.sh $PARR"
echo "Finishing at 'date'" >> /root/rlog.log

/home/parallels/testscript/newscript.sh

#! /bin/bash

PARAMM=$1

echo "'date' - newscript.sh ran with $PARAMM" >> /home/parallels/somelog.log

Ran / root /cronrun.sh da linha de comando como root em

18:17:28 CET 
18:17:29 CET

Adicionado ao crontab

*/2 * * * * /root/cronrun.sh

Então correu às 18:20:00 CET via cron

Depois disso:

/root/rlog.log

Starting at Thu Nov 16 18:17:28 CET 2017
Finishing at Thu Nov 16 18:17:28 CET 2017
Starting at Thu Nov 16 18:17:29 CET 2017
Finishing at Thu Nov 16 18:17:29 CET 2017
Starting at Thu Nov 16 18:20:01 CET 2017
Finishing at Thu Nov 16 18:20:01 CET 2017

/home/parallels/somelog.log

Thu Nov 16 18:17:28 CET 2017 - newscript.sh ran with thisparameter
Thu Nov 16 18:17:29 CET 2017 - newscript.sh ran with thisparameter

Portanto, a entrada de log do echo no shell do runuser está ausente. Por que isso pode ser possível? Como o cron roda de maneira diferente neste caso, o que faz com que o comando "runuser" seja ignorado / falhado?

(Sistema reproduzido no Ubuntu 16.04.3 LTS)

(SHELL = / bin / bash no crontab não está resolvendo)

    
por dszakal 16.11.2017 / 18:31

1 resposta

3

O cron é executado com um PATH específico, como visto no Debian upstream código-fonte :

#ifndef _PATH_DEFPATH
# define _PATH_DEFPATH "/usr/bin:/bin"
#endif

Referenciado aqui :

#if defined(POSIX)
    setenv("PATH", _PATH_DEFPATH, 1);
#endif

e como runuser mora em / sbin, você precisará usar o caminho completo ou definir o PATH em seu script para incluir / sbin.

    
por 16.11.2017 / 19:13