Eu quero que o script bash faça o eco apenas se eu executar e não ecoar se executado por um cron job

1

Eu quero fazer um eco para o terminal se o script estiver sendo executado por mim, ou quero fazer eco a um arquivo de log se estiver sendo feito por meio de um cron job.

Ubuntu 16.04

exemplo:

#!/bin/bash

if [ ***** ]; then
   echo "You executed this script just now !";
else
   echo "You were executed by the server cron at ${date}" >> example.log
fi

Eu reescrevi o texto acima porque achei que seria uma maneira mais simples de explicá-lo. É um exemplo mais direto e mais limpo.

    
por Curious Sam 05.03.2018 / 17:02

3 respostas

2

Tente isto:

if [[ -t 0 ]]; then
    echo "executed from terminal"
elif [[ $(< /proc/$PPID/comm) == cron* ]]; then
    echo "executed by cron"
else
    echo "executed outside of a terminal"
fi
    
por 05.03.2018 / 17:28
0

Como opção, você pode definir uma variável de ambiente em seu arquivo crontab e deixar o script verificar a variável. Ou seja em você crontab add CRON = yes

no seu script

se [["$ CRON"="sim"]]; então

ou simplesmente verifique se $ CRON está definido [[-z "$ CRON"]]

    
por 05.03.2018 / 23:00
-1

Super maneira fácil: basta criar um arquivo antes.

# m h  dom mon dow   command
* * * * * /usr/bin/touch /tmp/FOO && /your_script/

[ -f /tmp/FOO ] && echo "Executed by crontab"; rm /tmp/FOO || echo "I'm physically executing"
    
por 05.03.2018 / 17:36