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
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.
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"]]
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"