Como um script sh pode determinar se foi iniciado como um cron job em vez de interativo ou em segundo plano?

3

Eu gostaria de usar o mesmo script para cron e interativo, apenas imaginando se havia uma maneira universal sobre os sistemas UNIX / Linux para facilmente fazer essa determinação.

    
por mdpc 21.08.2013 / 01:25

3 respostas

4

Você pode tentar retornar o nome do processo pai com algo assim: -

ps -ocommand= -p $PPID | awk -F/ '{print $NF}' | awk '{print $1}'

Para mim, isso retornou konsole quando executei isso interativamente.

ou você pode criar scripts em alguma lógica para lidar com situações.

while getopts cm opt
do
case $opt in
        c)
                ##  Do crontask 
        ;;
        m)
                ##  Do manual
        ;;
        esac
done

Agora, ao executar o script, você pode passar uma opção como um atributo assim: -

/use/local/bin/example.sh -m
/use/local/bin/example.sh -c
    
por 21.08.2013 / 02:16
2

não há maneira universal. Usar a detecção interativa / não interativa do shell ou a detecção do tty também não é confiável, já que outros casos além do cron podem ter essas características. basta adicionar uma variável na sua entrada cron. Digamos que você precise executar test.sh e, em vez disso, use isso.

$ RUNENV=cron ./test.sh
cron
cat ./test.sh 
#!/bin/sh
echo $RUNENV

Isso é bastante fácil e confiável, se você controlar a configuração do cron.

    
por 21.08.2013 / 02:05
1

Eu não sei quão portável isso é, mas no Linux você pode executar tty e verificar se a saída é um tty.

$ tty
/dev/pts/2
$ crontab -e
* * * * * echo $(tty) >> /home/paulo/cron_tty
[Wait a minute...]
$ cat /home/paulo/cron_tty
not a tty

Observe que o tty também não será definido se o script estiver sendo executado de forma não interativa a partir de algo diferente do cron, mas desde que você disse que deseja distinguir o cron de interativo, isso não deve ser um problema.

Além disso, possivelmente a solução mais robusta é adicionar um switch ao seu script, informando se ele está sendo executado a partir do cron ou não, como sugerido em um Pergunta sobre estouro de pilha .

    
por 21.08.2013 / 02:01

Tags