Назад | Перейти на главную страницу

Я хочу, чтобы сценарий bash отображал эхо, только если я выполняю, а не эхо, если выполняется заданием cron

Я хочу вывести эхо на терминал, если скрипт выполняется мной, во плоти, или я хочу вывести эхо в файл журнала, если это выполняется через задание cron.

Ubuntu 16.04

пример:

#!/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

Я переписал вышесказанное, потому что подумал, что это будет более простой способ объяснить это. Это более прямой и понятный пример.

Попробуй это :

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

Как вариант, вы можете установить переменную среды в файле crontab, а затем позволить скрипту проверять наличие переменной. Т.е. в вашем crontab добавить CRON = да

в вашем сценарии

если [["$ CRON" = "да"]]; затем

или просто проверьте, определено ли значение $ CRON [[-z "$ CRON"]]

Супер простой способ: просто создайте файл раньше.

# 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"