5

С помощью сценария оболочки, можно сказать, когда он запускается с Cron против запуска вручную?

ОБНОВИТЬ:

был задан вопрос, почему я хочу знать. Моя задача cron будет входить в систему, и я хочу иметь возможность войти, если кто-то выполняет ее вручную.

4 ответа4

8

В те времена, когда мне нужно было это делать, я знаю, что это скрипт, который я никогда не перенаправлю в файл или канал. Таким образом, простой тест состоит в том, чтобы проверить, является ли stdout (он же дескриптор файла 1) tty (чего не будет от cron). В Баш:

if [ -t 1 ]
then
    : # running from terminal
else
    : # not running from terminal, cron maybe
fi

Опять же, предупреждение, это тест, просто если ваш стандартный вывод tty. Но работает для моих простых целей.

Вы также можете проверить, каков ваш родительский процесс. В Linux это может быть так просто, как:

if grep -q cron /proc/$PPID/cmdline &> /dev/null
then
    : # running from cron
fi
5

Вы можете определить уникальную переменную окружения в вашем crontab:

RUNNINGFROMCRON=1

16 18 * * *     /usr/local/bin/crontest

Я проверил с этим сценарием:

#! /bin/bash

echo " running script "

echo -n "testing for var: "
echo $RUNNINGFROMCRON

Когда я бежал от cron вывод был:

running script 
testing for var: 1

Когда я запускался из командной строки вручную, вывод был:

running script 
testing for var:
1

Вы можете проверить имя родительского процесса, которое можно получить с помощью ps -p $PPID -o comm= . Это подделка, конечно.

Однако это не обязательно хорошая идея (например, вы не сможете легко протестировать свои задания cron вручную). Может быть, если вы объясните, почему вы этого хотите, кто-то может предложить лучшее решение.

0

Вы можете создать специального пользователя для работы cron. Затем сделайте ваш скрипт доступным для чтения только этому пользователю и поместите его в crontab пользователя. Таким образом, никакой другой пользователь не сможет даже прочитать скрипт, не говоря уже о его выполнении.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .